wercker.ymlを元にCircleCI2.0用の設定ファイルを書いてみる!
設定ファイルがめっちゃ似てる
ので移行しようと思ったら瞬時に終わります。
手元にあったrails用のwercker.yml
phantomjsはdocker image内に入れてしまっています(諸事情でrubyのバージョンが古い)
# wercker.yml box: hoshinotsuyoshi/ruby:2.1.3-phantomjs build: steps: - bundle-install - script: name: timezone code: ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime - script: name: rspec code: bundle exec rspec
yamlを書いてみる
このファイルとかを 参考に書いたのがこちら。
# .circleci/config.yml version: 2 jobs: build: docker: - image: hoshinotsuyoshi/ruby:2.1.3-phantomjs working_directory: /home/ubuntu/hogehoge steps: - checkout - run: name: Install Ruby Dependencies command: bundle install - run: name: timezone command: ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime - run: name: rspec command: bundle exec rspec
これで終わりです。
ローカルで試す この方法でcircleci buildして手元テストが動きました。
こちらの記事 も見ました。
circleci.com上では、まだビルドを試したりしていない。
#serverlesstokyo #2 参加レポート (lambdaを速くする話・Azure functionsのtrial・開発ツールの話が面白かった)
#serverlesstokyo行ってきました
#serverlesstokyo meetupに行ってきました。
meetupでサイバーエージェントさんにきています。🍕会場すげえ!#serverlesstokyo pic.twitter.com/8Fdk8Lh7JH
— hoshinotsuyoshi (@hoppiestar) January 17, 2017
先に全体的な感想
インフラエンジニアリングレス #serverlesstokyo
— hoshinotsuyoshi (@hoppiestar) January 17, 2017
というのは冗談ですが、「なんでもかんでもFaaSに任せていこう」という主旨のお話が、どんどん続いていって楽しかったです ⚡
これを見れば発表内容が全部わかるスライド一覧
こちらです --> スライド一覧
スライド抜粋
スライド抜粋1: AWS Lambdaのチューニングの話
この話が今の業務の話に一番近く、内容も身近に感じました。
以下、このスライドの紹介している「Lambdaファンクションを速くする」方法。以下に(自分に関係ありそうなところだけ)抜粋を載せます。
- コールドスタートを速くする
- コールドスタートを減らす
- そもそもコールドスタートを発⽣させない
- 定常的にリクエストが発⽣するシステムではほとんど発⽣しない
- そもそもコールドスタートを発⽣させない
- Lambdaファンクションに対してPingする
- 定期的にInvokeを⾏うことでコンテナが破棄されることを回避する
- 5分間隔程度がオススメ
- コンピューティングリソースを増やす
- メモリ設定
- コンピューティングリソースの割当を増やすことで初期化処理⾃体も速くなる
- ランタイムを変える
- VPCを使わない
- パッケージサイズを⼩さくする
- サイズが⼤きくなるとコールドスタート時のコードのロードおよびZipの展開に時間がかかる
- 不要なコードは減らす
- 依存関係を減らす
- 不要なモジュールは含めない
- コールドスタートを減らす
- ファンクションの実⾏時間を短くする
- 同時実⾏性をあげる
「初期化コードをハンドラ外に置く」はサンプルコードがそうなっていることが多いので、自然とそうなっていることは多いと思います。 不要なコードは減らす、ベストプラクティスに従う、は、まぁそうですよね。(^^)
スライド抜粋2: Azure functionの話
MSのFaaSの話。
これだけたくさんの言語をサポートしてて、rubyがないのが残念でなりません。
このデモ環境 で試すことができる。
実際動かしてみましたが、結構分かりやすかったです。 操作画面は、AWS Lambdaのやつより、使いやすい印象。
スライド抜粋3: 利用されているフレームワークの話。
オープニング のこの話も面白かった。
ServerlessFramework、 apexが人気。
会社内でもこの2つを使っていますね。
以上です。
静的解析ツール「RubyCritic」のUIが良くなっていたので紹介したいです!
この記事は feedforce Advent Calendar 2016 - Adventar の2日目の記事です。
1日目は 源義経のシンプルな考え方が好き - Marketing book でした。良い話だ。(ちなみに大河ドラマが平清盛だった年は、我が家では後白河院の評価が高かったです。懐かしい。)
RubyCriticのご紹介
RubyCriticはrubyコードを静的解析するツールです。rubygemで提供されています。
単純な使い方としては、$ gem install rubycritic
するなりbundler使うなりしてインストールし、
$ rubycritic .
を実行します。$ rubycritic ./app ./lib
のように、指定のディレクトリだけを対象にして実行することもできます。
実行すると./tmp/rubycritic/
の下に解析結果がhtmlで保存され、ブラウザが起動して閲覧することができます。
version3.1.0(先月リリース)で大幅なUI改善がありました! 🎉 色付きになってわかりやすくなりました。以下gifアニメ。
色の使い方とかは、コード解析のSaaSであるCodeClimateに似てるな、と思いました。 CodeClimateのグラフとかはこんな感じ -> CodeClimate - Google画像検索
RubyCritic version 3.1.0の出力イメージ
とある大きめのサイズのrailsプロジェクト*1を手元にクローンして、rubycritic
を走らせてみました。
トップ画面
モジュールごとの解析結果一覧
smellの一覧
コード上の問題箇所の表示
ズームインできる(gifアニメ)
(ちなみに、以前は以下のように、モノクロ〜な感じでした。)
以前のトップ画面
RubyCriticの中身をちょっと覗いてみる
RubyCriticは、以下のruby解析用Gemに依存しています。
- reek
- reekにおいて定義された、
smell
(コードの"臭う"箇所)を検出します。- reekのドキュメントによると、
smell
は、「コードが読みにくい、または保守しづらい場所を示唆するもの」とのことです。
- reekのドキュメントによると、
- smellの一覧はこちらです。
- reekにおいて定義された、
- flay
- コードどうしの類似度が高い部分を検出します。
- flog
- 複雑度の高い部分を検出します。
Churn and Complexity のグラフ の見方等について
このグラフの意味は、こんな感じです。
Complexity
Complexity
は、ABC(Assignment/Branches/Calls)のサイズです。低いほど良い。
RuboCopにもABCサイズを測るやつがありますが、
それと似たような感じだと思います。
Churn
Churn
は、ファイルのコミット回数(=ファイルの変更回数)です。
裏側ではgitを叩いてチェック(!!!)していました。
ソースを読む限り、gitの他にはmercurialとかに対応しているっぽいです。
これも低いほど良い、とのことですが、歴史の長いリポジトリほど高くなるのは仕方ないので、あくまで相対的に他のファイルと比較するものだと思います。
Rating
ファイルごとにRating
がつきます。これはA〜Fで表され、色は緑〜赤で表されます。Aに近いほど良い。
前述のComplexity
とsmell
の量が、このRating
に影響します。
こんな感じで計算している様子でした。
reekが検出するsmell
のカスタマイズについて
reekが検出するsmellはだいぶ個性的なので、もしかしたらルールによっては、使う人の肌に合わないものもあるかもしれません。
リポジトリのトップにyamlファイル(.reek
ファイルまたはconfig.reek
ファイル)を置くことで、reekが検出する特定のsmellをカスタマイズして抑制することができます。
READMEのこのあたりにやりかたが書いてあります。
まとめ・感想
reekのsmellは個性的なので、うざく感じるかもしれませんが、とりあえず走らせてみると、何か気づきがあるかもしれません。
CodeClimateと似ているかもしれませんが、コードの内容を外に漏らさずに、手元のみで完結できるというのは、選択肢が増えて良いと思いました。
メリークリスマス。
追伸
feedforce Advent Calendar 2016 - Adventar の3日目はこちらです
参考リンク
*1:今回railsアプリであるrubygems/rubygems.orgを使いました