Wiki » 履歴 » リビジョン 22
リビジョン 21 (みぞ @mizo0203, 2018/06/24 16:24) → リビジョン 22/33 (a a, 2018/06/24 16:45)
# Wiki
## 開発環境
* Python 開発環境のセットアップ
* https://cloud.google.com/python/setup
* エディタのインストール
* https://code.visualstudio.com
* Python extension for Visual Studio Code のインストール
* https://marketplace.visualstudio.com/items?itemName=ms-python.python
* Flake8 のインストール
* `$ pip3 install flake8`
* Visual Studio Code の設定
* ![vs_code_setting.png](http://redmine.mizo0203.com/attachments/download/63/VS%20Code%20Setting.png)
## 開発ツール
* GitHub
* コード管理
* プライベートリポジトリ(後にパブリックへ変更する)
* 中央集権型ワークフローを採用する
* 中央リポジトリ: https://github.com/mizo0203/google-home-shiritori
* Redmine
* 要件管理
* 不具合管理
* Wiki
* Markdown + PlantUML
* ドキュメント作成
* 設計図作成
* ※ Word・Excel・PowerPoint は使用禁止
* CircleCI - 1 コンテナ無料(プライベートリポジトリでも可、ビルド時間 25h/month まで)
* ビルドチェック
* 静的解析
* Lint - コードの構文チェック
* FindBugs - 実行時に起こり得るバグの検出
* 【できれば】Programming Tests
* 【できれば】Deploy
* Slack
* チャット
## 利用サービス
* DialogFlow
* [JSONフォーマット](https://dialogflow.com/docs/fulfillment#section-format-of-request-to-the-service)
* 参考:
* Dialogflow入門 - https://qiita.com/kenz_firespeed/items/0979ceb05e4e3299f313
* > User saysに「明日の福岡を予約」
* 「User says」欄は現在存在しない、「Training phrases」欄に入力する
* > 入力内容を元に自動的にEntityが検出されParameterとして設定されました。
* 自動的には検出されないので、単語をクリックして Entity を追加すること
* `@sys.date` は「明日の」ではなく「明日」を指定すること
* Dialogflowの使い方について - http://hiyo-ac.hatenablog.com/entry/2018/02/25/162729
## 開発フロー
1. Redmine にチケットを作成
2. GitHub で各自ブランチを切って Commit & Push
* プリフィックス(範囲) + 英語のコミットメッセージ + #チケット番号 + @作業時間
* ```feat(*): hogehoge. fix #999 @1.5h``` :新しい機能
* ```fix(*): hogehoge. fix #999 @1.5h``` :バグフィックス
* ```docs(*): hogehoge. fix #999 @1.5h [ci skip]``` :ドキュメントのみ変更(CI は実行しない)
* ```style(*): hogehoge. fix #999 @1.5h``` :コードの意味に影響を与えない変更(空白、フォーマット、セミコロンの欠落など)
* ```refactor(*): hogehoge. fix #999 @1.5h``` :バグを修正したり、機能を追加したりしないコード変更
* ```perf(*): hogehoge. fix #999 @1.5h``` :パフォーマンスを向上させるコード変更
* ```test(*): hogehoge. fix #999 @1.5h``` :既存のテストの欠落または修正の追加
* ```chore(*): hogehoge. fix #999 @1.5h``` :ビルドプロセスやドキュメント作成などの補助ツールやライブラリの変更
* 参考: [【今日からできる】コミットメッセージに 「プレフィックス」 をつけるだけで、開発効率が上がった話 - Qiita](https://qiita.com/numanomanu/items/45dd285b286a1f7280ed)
* 参考: [angular.js/DEVELOPERS.md at master · angular/angular.js](https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#type)
* 原則 1 Commit 1 チケット
* ```fix(*): hogehoge. ref #999 @1h``` :対処未完了で Commit する場合
* ```fix(*): hogehoge. fixs #99 @0.5h #999 @1h``` :例外的に複数チケットを 1 Commit で対処する場合
3. CircleCI でビルドチェック、静的解析、PT
4. みぞ + 1 名の 2 名でコードレビュー & マージ
5. CircleCI でビルドチェック、静的解析、PT、Deploy
## 開発言語
Python 2.7
* Google App Engine for Python の無料枠では Python 2.7 しか動かせない
*
* ただし、 Python 3 系に Porting できる実装で行う
* ```pylint --py3k ./* tests/*``` でチェック可能
* PEP 8に準拠した実装を行う
* ```flake8 ./ tests``` でチェック可能
* 単体テストを記述する
* ```python -m unittest discover -v tests``` で実行可能
## 設計資料
[[Design_Documents|設計資料]]
## Google App Engine for Java を利用する開発
サーバーはJSONを処理できれば、何でも使用できる
* IntelliJ IDEA Community Edition で環境構築
* https://cloud.google.com/tools/intellij/docs/quickstart-IDEA
* https://cloud.google.com/tools/intellij/docs/create-standard
## 利用 OSS ライブラリ
| 名前 | License | URL |
|:----------:|:-----------:|:------------:|
| Apache Commons IO | Apache 2.0 | https://commons.apache.org/proper/commons-io/ |
### 利用目的
* Apache Commons IO
* IOUtils: InputStream/OutputStream と String の相互変換