taisablog

taisa's engineer blog

スクリーンショット 2019-08-27 14.18.45

投稿日:

-

執筆者:


comment

Your email address will not be published.

関連記事

no image

2017年の振り返り ~活動報告~

2017年のインプットとアウトプットを整理しながら振り返る。 読書 大体以下の本を読んだ。今年は書評ブログも書こう。 SCRUM BOOT CAMP THE BOOK ジョイ・インク 役職も部署もない全員主役のマネジメント スクラム実践入門 ── 成果を生み出すアジャイルな開発プロセス (WEB+DB PRESS plus) JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス JavaScriptパターン ―優れたアプリケーションのための作法 JavaScript Ninjaの極意 まつもとゆきひろ 言語のしくみ ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装 ゼロからはじめるデータサイエンス ―Pythonで学ぶ基本と実践 Real World HTTP ―歴史とコードに学ぶインターネットとウェブ技術 みんなのGo言語[現場で使える実践テクニック] SQLアンチパターン ブログ 合計17本書いた。1、2月は外したけど概ね月1ペースは保てたのでよかった。今年も最低同じペースか月2本ペースで書きたい。 外部LT そもそも外部でLTをすることが目標だったからできてよかった。実際にはもう一つやったけど SlideShip じゃなかったから資料がみれなくなった。SlideShip最高! コミュニティ活動 PyCon JP 2017 in Tokyo スタッフ 去年活動できなくて残念だったから今年はコミットできたし当日参加もできたから最高だった。 カンファレンス参加 PyCon APAC 2017 – PyCon in Malaysia and python in general AWS Summit Tokyo 2017 Day2、Day3 PyCon APAC は行きたくて行けてなかったイベントだったから行けて本当によかった。 今年もなんとか参加したい。 英語 Talk Python To Me DMM英会話 海外ドラマ・映画 Walking Dead メンタリスト プリズン・ブレイク なんとか英語に触れられた一年になった。今年はもう少し比重を多くする予定。 ライブ Perfume FES!! 2017 Perfume×電気グルーヴ@幕張 5th ANNIVERSARY SILENT SIREN LIVE TOUR 2017 『新世界』@武道館 Яealライブ@渋谷www SILENT …

Python Bottleのソースを読む 起動編

Pythonの軽量WebフレームワークBottleのソースを読む 起動編 Bottleとは Bottle is a fast, simple and lightweight WSGI micro web-framework for Python. It is distributed as a single file module and has no dependencies other than the Python Standard Library. Pythonの軽量Webフレームワークで、特徴はシンプルで早く、Pythonの標準ライブラリにも依存していないWebフレームワークであることとフレームワーク本体が1ファイルで構成されていることである Class Hierarchy Doxygenを使って出力した図Bottleは1ファイルながら中でそれぞれのクラス、主にServer、Templateが継承関係にあるのがわかる(コード量は4000行位)。ServerやTemplateクラスはたくさんあるが実際はその中のどれかを選択して利用する形となる 起動 Bottleの起動はrun()を呼び出す方法とコマンドラインインターフェースを使う方法が用意されている run()を使う方法 以下のように記載し起動することでサーバが立ち上がる from bottle import run, route @route(‘/’) def index(): return ‘Hello World’ run(host=’localhost’, port=8000, debug=True) コマンドラインインターフェースを使う場合 以下のコマンドで起動可能 # コントローラを指定 python -m bottle ‘package.controller’ # 説明は省略するが明示的にアプリを指定することも可能 python -m bottle ‘package.controller:app’ controller.py # runは不要 from bottle import ,route @route(‘/’) def index(): return ‘Hello World’ 起動処理を確認する コマンドラインインターフェースを使う場合 mainが2箇所あるが、これはサーバアダプダに必要なライブラリを必要としているからで、1つ目のmainでまずサーバアダプタに必要なライブラリを読み込み2つ目のmainでサーバが起動される仕組みになっている run()でサーバを起動する run()では、渡された引数の値をそれぞれ読み込んだあと最後にServerAdapterのrun()を呼び出している。Bottleでは多くのサーバをServerAdapterを継承することでサポートしており、指定されたサーバを起動するようになっている。指定しない場合はwsgirefがデフォルトで呼ばれる。また、appパラメータは特別指定しなければ、内部で自動的にdefaultが使われるので特別指定する必要はない。 サーバをロードするまで処理を追ってみる まず、Bottleでサポートしているサーバは以下のように宣言してある。 server_names = { ‘cgi’: CGIServer, ‘flup’: FlupFCGIServer, ‘wsgiref’: WSGIRefServer, ‘waitress’: WaitressServer, …

PHPUnitの使い方を仕組みから理解する

ここ数年仕事ではPHPを使って開発をしていますが、最近品質について考える機会が増えたこともあり、これを機にPHPUnitと周辺のモジュールの仕組みを理解してより楽にテストができるようにしたいと思います。 PHPUnitは? Sebastian Bergmann Created PHPUnit. Co-Founded thePHP.cc. Helps PHP developers build better software. PHPUnitの作者は、Sebastian Bergmannという方でthePHP.ccのファウンダーのようです。関連情報は以下にて確認してみてください。 TwitterアカウントPHPUnit GithubPHPUnitマニュアル PHPUnitの構成 PHPUnitは以下のような構成になっています。 phpunit php-code-coverage php-file-iterator php-text-template php-timer php-token-stream phpunit phpunit-mock-objects これらはGitHub上ではそれぞれ別々のリポジトリに分かれていますが、phpunitが本体でそれ以外はデフォルトの関連ライブラリという位置づけになるかと思います。 PHPUnitのsrc構成 モックオブジェクトなどを除いたphpunitだけのパッケージとクラス構成を見てみるとこんな感じになります。 ├── Exception.php ├── Extensions │   ├── GroupTestSuite.php │   ├── PhptTestCase.php │   ├── PhptTestSuite.php │   ├── RepeatedTest.php │   ├── TestDecorator.php │   └── TicketListener.php ├── ForwardCompatibility │   └── TestCase.php ├── Framework │   ├── Assert │   │   └── Functions.php │   ├── Assert.php │   ├── AssertionFailedError.php │   ├── BaseTestListener.php │   ├── CodeCoverageException.php │   ├── Constraint │   │   ├── And.php │   │   ├── ArrayHasKey.php │   │   ├── ArraySubset.php │   │   ├── Attribute.php │   │   …

PHPのモッキンフレームワークPhakeの使い方

前回に引き続きPHPUnit関連の記事です。今回はPHPのモッキンフレームワークであるPhakeの使い方を確認します。 Phakeについて 作者は? Mike Livelyという方のようです。 twitterGitHub Phakeって? こちらですね。 PhakeGitHub ファイル構成 一応ファイル構成を載せておきます。 . ├── Phake │   ├── Annotation │   │   ├── MockInitializer.php │   │   └── Reader.php │   ├── CallRecorder │   │   ├── Call.php │   │   ├── CallExpectation.php │   │   ├── CallInfo.php │   │   ├── IVerificationFailureHandler.php │   │   ├── IVerifierMode.php │   │   ├── OrderVerifier.php │   │   ├── Position.php │   │   ├── Recorder.php │   │   ├── Verifier.php │   │   ├── VerifierMode │   │   │   ├── AtLeast.php │   │   │   ├── AtMost.php │   │   │   ├── Result.php │   │   │   └── Times.php │   │   └── VerifierResult.php │   ├── ClassGenerator │   │   ├── EvalLoader.php │   …

Python Bottleのソースを読む ユニットテスト編

Python Bottleのソースを読む テスト編前回までで一通りメインの機能は確認できました。ではいよいよコード追加してプルリクを投げましょうというところですが、テストは?ということでユニットテストとカバレッジ状況をチェックしてみます。また自作アプリに対してのテスト方法もチェックしてみます。 Bottleのユニットテストとカバレッジ状況 GitHub上のBottleをクローンすると直下にtestディレクトリがあります。ここにずらーっとテストがありますが、よくよく見てみるとtestall.pyという全実行のエントリポイントが用意されているのでそれを実行します。 # noseを入れてない場合はインストール pip install nose # こんな感じに実行 nosetests –with-coverage –cover-html testall.py でました。bottle.pyだけを見てみると76%しっかりテストが書かれてるのがわかります。 bottle.py 2277 485 849 79 76% そしてhtmlをチェックコードのカバレッジ状況が一目瞭然。あとは足りないとこテストしたり自分で処理追加してテストしたり。これでいろいろ安心。 BottleでつくったWebアプリのテスト方法 せっかくなのでWebアプリのテスト方法も見てみます。これは公式ドキュメントにしっかり書かれているのでそこをみればだいたい分かると思います。noseインストール pip install nose テスト対象コード import bottle @bottle.route(‘/’) def index(): return ‘Hi!’ if __name__ == ‘__main__’: bottle.run() テストコード単純にindex()を実行して結果をassertする import mywebapp def test_webapp_index(): assert mywebapp.index() == ‘Hi!’ テスト実行 nosetests test_app.py Ran 1 test in 0.014s OK 上記は直接関数をテストする方法ですがwebtestを使ってwebベースでアクセスしてテストする方法もあります。ただこの方法をやってみたところ明示的 app = Bottle()を宣言しないとうまく実行できませんでした。ここら辺はもう少しwebtestの使い方がわかればなんとかなるかもしれません。webtestインストール pip install webtest テスト対象コード from bottle import Bottle # アプリを明示的に作成 app = Bottle() @app.route(‘/’) def index(): return ‘Hi!’ if __name__ == ‘__main__’: run(app=app) テストコード公式ドキュメントではログイン・ログアウトのテストが書かれてましたがここでは省略 from webtest import TestApp import mywebapp def test_index(): app = TestApp(mywebapp.app) assert …