あなたのコードに ハナマルを。- 〜...

28
あなたのコードに ハナマルを。 ぼっち開発でも出来る プラグインテスト初めの一歩(仮) 2016.11.26 redmine.tokyo 第11回勉強会 たかの あきこ (@akiko_pusu)

Upload: akikopusu

Post on 09-Jan-2017

2.577 views

Category:

Internet


3 download

TRANSCRIPT

Page 1: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

あなたのコードに ハナマルを。 〜 ぼっち開発でも出来る

プラグインテスト初めの一歩(仮)

2016.11.26 redmine.tokyo 第11回勉強会

たかの あきこ (@akiko_pusu)

Page 2: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

さいきん目撃したTWEET画像。

あわわわわ……拙い事例ですが、

Redmineの普及を願っておはなしします。

Page 3: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

たかのあきこ @akiko_pusu

おはなしするひと。

20代後半 (16進ってことで)

エンジニア35歳説なにそれ?

産休まえにRedmineと出会う

Redmine.tokyo ロゴ描きました

趣味でプラグイン書いてます

色々あって渋谷で働いてます

ココナラって会社です!

ごめんなさい今回は時間なくてイラストなしです ><

自己紹介はさっくりと…

Page 4: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

おはなしすること。

なぜやるの? なにからはじめればいい? どうやってるの? こんなものつかってます ぼっち開発でも、コードレビュー! やってみての気づきとか まとめ & 時間があったら参考画面

4

Page 5: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

なぜやるの?

問い合わせが来る! インストールできないです マイグレーションできないです このプラグインとこのプラグイン入れてるんだけどエラーになっちゃいます…

5

プラグイン公開しました! でも…

Page 6: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

過去のクレーム(汗チケットの山…

Page 7: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

— by @akiko_pusu

“ たくさんの  Redmineかんりしゃさんを

こまらせたいわけでは ないのです

べんりにつかってほしい だけなんです ”

はじまりは、ここから。

Page 8: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

マイグレーションが通るかどうか プラグインを配置した状態でのマイグレーションの確認 ロールバックの確認も!

8

テストコードがなくても。 まずはこれだけは。

$ bundle exec rake redmine:plugins:migrate RAILS_ENV=test

$ bundle exec rake redmine:plugins:migrate \ NAME=${PLUGIN_NAME} VERSION=0 RAILS_ENV=test

なにからはじめればいい?

Page 9: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

どうやってやるの?

まずRedmine本体を取得 本体のマイグレーションする プラグインを配置してマイグレーションする Redmineのベースディレクトリからプラグイン用のテストを走らせる

9

プラグインのテストには Redmine本体が必要です。

Page 10: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

前田さんからの取れ立て情報!

“Redmine本体に付属の テストも通るか

ためしてみよう!”

ありがとうございます さっそくCiのステップに入れます!

※ 20161127:追記このスライドアップ後に手元のMacで 試したら素のRedmineでも失敗しました…rake ci だと想定される全てのSCMプトロコル、DBに対するテストを通しで行うようです(?)。そこまでの環境を用意するのは大変なので、失敗しても参考情報程度がいいのかも。

Page 11: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

基本のテストは?

$REDMINE_ROOT/test/ 以下を見よう テスト用データは test/fixtures/を利用しよう まずは test/unit/*.rb 以下のユニットテスト、モデルのテストを参考に取り組もう 自作プラグイン用のfixturesも追加

11

基本はRedmine本体の テストコードを参考に。

Page 12: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

でもプラグインのテストをRspecで書くことはできます! 自分でRspecと関連するヘルパーを入れちゃいましょう! 自分のプラグインのGemfileにrspec_rails を追加

Redmine本体のbundle install時にRspec用のgemが入ります

12

Redmine本体はまだRspecじゃない…

Rspecでテスト書けるの?

Page 13: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

13

プラグイン用のspec helperやrails_helperはちょっと工夫すること。

Rspecでテスト書けるの?

テスト用データにRedmine本体のfixturesも利用できるように

実行はやっぱりRedmineのベースディレクトリから

$ bundle exec rspec -I plugins/redmine_issue_templates/spec \ plugins/redmine_issue_templates/spec/

Page 14: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

— by @akiko_pusu

“ やりかたはなんとなくわかった ……

でもめんどくさい”

そこで、自動化ですよ。

Page 15: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

15

オープンソースだと無料で利用できるCI環境がいくつもあります!

こんなものつかってます

初はJenkins

仕事で使ってるCIツールの学習にdrone.io や wercker に切り替え

$ bundle exec rspec -I plugins/redmine_issue_templates/spec \ plugins/redmine_issue_templates/spec/

コマンド長いのでrake taskで実行中。

Page 16: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

16

drone.io https://drone.io/

こんなものつかってます

googleの開発したDockerコンテナを利用したCI

OSS版もあり、前職で利用してたのをきっかけにツールに慣れるため個人でクラウド版を利用

pushのたびにビルド実施してくれます

https://drone.io/github.com/akiko-pusu/redmine_banner https://drone.io/github.com/akiko-pusu/redmine_issue_templates     ビルドの内容 / Statusは公開してますので、よかったら参考にしてください!

Page 17: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

17

wercker http://www.wercker.com

こんなものつかってます

Docker + KerbernatesベースのCI/CD

現職で利用してたのがきっかけやっぱり慣れるために個人で使ってみた

pushのたびにビルド実施

drone.ioではrubyのバージョンが限られているのでこちらをメインに

https://app.wercker.com/akiko-pusu/redmine_issue_templates/runs     ビルドの内容 / Statusは公開してますので、よかったら参考にしてください!

Page 18: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

18

wercker こんなものつかってます

https://github.com/akiko-pusu/redmine_issue_templates/blob/master/wercker.yml                    設定は公開してますので、よかったら参考にしてください!

wercker.yml というビルド用の設定ファイルに基づいて動きます

Banner, Templateプラグインはwerckerを使ってます

現在SQLiteですがDB用のコンテナと組み合わせてテストできたりします

Page 19: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

19

オープンなCIを使うと…

あなたのコードに ハナマル(バッジ)が!

Page 20: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

ぼっち開発でも、コードレビュー!

静的解析、やってみよう!

— by @akiko_pusu

“ひとりでほそぼそと つくってます…

コードレビューして   みたいんです……”

Page 21: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

ぼっち開発でも、コードレビュー!

SideCI https://sideci.com/ja

綺麗なコードと文化を作る コードレビューのためのCI

面倒な設定が要りません!

30秒で解析できちゃう!!   http://qiita.com/akiko-pusu/items/0f4cf90ab91d88e16c9d

Qiitaの記事もよかったらどうぞ!

Page 22: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

SideCI による静的コード解析

ぼっち開発でも基本はプルリク作ってマージ

プルリクの際にはSideCIが静的解析、werckerがテスト実施

キレイじゃないコードはガンガンレビューが付く!

どっちもパスしないとマージできない設定に!

自分以外のプルリクも、事前にチェック、テストを通して確認してもらえます

Page 23: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

やってみての気づきとか。

インストール関連の問い合わせ減ったかも

本体よりもテスト用コードが増えてきた(汗

テストをしやすい単位に切り分けてコードを書くほうがいいと実感した(ただいま修行中)

jQueryをはじめフロントで制御する動作が増えてきたので、E2Eテストも必要と感じた

Capybara + Seleniumのテストも追加 しているところです。

Page 24: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

まとめ。

使ってくれる人が困らないようにテストを!

でもプラグインテストは若干面倒

まずはマイグレーションからはじめよう

面倒な設定はCIにまかせちゃおう

静的コード解析も利用していこう

あなたのコードに ハナマルを!

Page 25: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

参考:SideCI負債カンバンの例。

コード上になんらかの 難点がある場合。

コードがクリーンな場合。

Page 26: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

参考:CIでのE2Eテストの例。

wercker や drone.io でテストする場合は、 ヘッドレスブラウザの PhantomJSを使います。

wercker の場合は、 ベースのコンテナでテストする前に、 PhantomJSをインストールする処理をしています。

テンプレートをポップアップで表示、フィルタ、適用させる機能や、Cheklist連携させたところを テストできるように調整中。

Page 27: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

参考:CIでのE2Eテストの例。

wercker や drone.io でテストする場合は、 ヘッドレスブラウザの PhantomJSを使います。

wercker の場合は、 ベースのコンテナでテストする前に、 PhantomJSをインストールする処理をしています。

テンプレートをポップアップで表示、フィルタ、適用させる機能や、Cheklist連携させたところを テストできるように調整中。

Page 28: あなたのコードに ハナマルを。-  〜 ぼっち開発でも出来るプラグインテスト初めの一歩(仮) -

参考:個人的にこころがけてること。

無理しないで小さくやろう

追加Gemは本体と競合するので控えめに

なるべくこまめにCIまわそう

カバレッジやバッジでモチベーション維持!

プラグインと同じ機能が本体に実装されたら、

それが一番いいことです。

本体に実装される際の参考になれたら幸せ。

なので、テストは今後も付けていこうと思います。