Atom から Visual Studio Code に移行してみた
Atom を使っているとたまに重くなることありませんか? 開発環境で Atom Helper が CPU 100% になる現象が頻発していたので、重い腰を上げて Visual Studio Code を入れてみました。
Visual Studio Code をインストール
まずは公式サイトからダウンロードしてきます。
Visual Studio Code - Visual Studio
基本設定をいじる
[基本設定]-[設定] 画面から、拡張 JSON 形式で設定を記述します。Sublime Text みたいですね。
とりあえず最初は以下の設定を行いました。
// 保存時にフォーマットを行うかどうか "editor.formatOnSave": true, // タブサイズを半角スペース2桁に "editor.tabSize": 2,
拡張機能をインストールする
Atom では主に Ruby/JavaScript/HTML/CSS を書いていたので、この辺りのコーディングに必要な拡張機能を入れてみました。
- Beautify
- 各種コードのフォーマットに
- ESLint
- ESLint の実行
- PostCSS syntax
- PostCSS のシンタックス表示に
- Prettier
- JavaScript のコードフォーマットに
- Ruby
- ruby-rubocop
- Rubocop の実行に
- Vetur
なぜか手元ではファイル保存時に Rubocop が走ってくれないのですが、それ以外はほぼ Atom に近い状況になりました。
Settings Sync を導入して設定を共有する
別の環境にも VS Code を入れる場合にイチから設定するのも面倒なので、基本設定や拡張機能を共有できる Settings Sync を導入しました。
設定内容は Secret Gist を経由して共有されます。この共有の仕方は面白いですね。
Amazon Kinesis Firehose + Elasticsearch + fluentd でログ収集を試してみる
AWS Summit でのアナウンス通り、本日から Amazon Kinesis Firehose が東京リージョンで利用可能となりました。
さっそく Firehose を使いながら、Elasticsearch を組み合わせたログ収集構成を試してみたいと思います。
前提
Firehose ストリームの作成
まずは Amazon Kinesis のページから、[Firehose コンソールに移動] ボタンをクリック。
続けて [Create Delivery Stream] ボタンをクリック。
[Delivery stream name] に好きな名前を入力、[Choose source] は Direct PUT or other sources
を選択します。
Firehose では Lambda でストリームに流れレコードを加工したりできます。今回は Lambda を使わないので Disabled
を選択します。
[Destination] は Amazon Elasticsearch Service
を選択します。すると、ES のドメインやインデックスに関する設定が出てきますので、各項目入力していきます。
なお、[Index rotation] の設定に応じて、インデックス名のサフィックスが自動的に付与されます。
例えば [Index rotation] に Every day
を選択すると、実際に作成されるインデックス名は インデックス名-YYYY-MM-DD
という形式となります。
[S3 Backup] で All records
を選択することで、全てのログが S3 にバックアップされます。
続けて転送先となる S3 バケット名、プレフィックスを指定していきます。
S3 に転送される際、{プレフィックス名}YYYY/MM/DD/HH
という形式でフォルダが自動的に作成されます。そのため、プレフィックス名でフォルダを切りたい場合は末尾にスラッシュ (/
) を入れておくと良いです。
次に転送時のバッファリングの設定を行います。通常はデフォルトのままで問題ないですが、必要に応じてチューニングしましょう。
最後に IAM ロールを作成または選択して完了です。
fluentd で Firehose に転送する
ログの転送に fluentd を使います。まずは td-agent と firehose 用のプラグインをインストールします。
fluent-plugin-kinesis-firehose
というプラグインもありますが、現在は非推奨のようなのでご注意ください。
$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh $ td-agent-gem install fluent-plugin-kinesis $ chkconfig td-agent on
次に td-agent の設定を行います。
<source> @type tail path /path/to/path/access.log pos_file /tmp/access.log.pos format json time_format %Y-%m-%dT%H:%M:%S%z time_key time </source> <match **> @type kinesis_firehose region ap-northeast-1 delivery_stream_name firehose_stream_name flush_interval 1s include_time_key true </match>
最後に td-agent を起動して完了です。設定に問題がなければ、S3 にファイルが転送され、ES にドキュメントが追加されていきます。
$ service td-agent start
Firehose コンソールからもグラフで確認できます。
S3 に転送されるファイルについて
Firehose から S3 への転送量削減のため、転送時に gzip 等に圧縮させる事が可能ですが、このファイルを S3 からダウンロードすると中身が展開された状態で落ちてきます。ダウンロードファイル名は *.gz
のままなので、なぜか解凍できないと変なところでハマりました。。
Ruby/Padrino/MySQL 5.7 プロジェクトをCircleCI 2.0 に移行してみた
こんにちは、まちいろの工藤です。
まちいろでは CI に CircleCI を利用していますが、先日ついに CircleCI の 2.0 が正式リリースされましたね。 まだ 2.0 に対応していなかったので、既存のプロジェクトを 2.0 に対応させてみました。
対象プロジェクトの技術スタック
対象プロジェクトは Ruby/Padrino で書かれた至って普通の Web アプリケーションって感じです。
移行手順
CircleCI 2.0 への移行は、2.0 用の設定ファイルを push するだけです。
2.0 から、設定ファイルが circle.yml
から .circleci/config.yml
に変更されています。
Circle CI のサイトから既存のリポジトリを選択すると config.yml の雛形が出てくるので、そちらを参考にすると良いかと思います。
以下、最終的にできあがった config.yml です。
version: 2 jobs: build: working_directory: ~/repo docker: - image: circleci/ruby:2.4.1-node-browsers environment: DB_HOST: 127.0.0.1 - image: mysql:5.7 command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_bin --innodb-large-prefix=true --innodb-file-format=Barracuda environment: MYSQL_USER: foo MYSQL_PASSWORD: foo MYSQL_DATABASE: foo MYSQL_ALLOW_EMPTY_PASSWORD: "yes" MYSQL_ROOT_HOST: '%' steps: - checkout - run: name: install dockerize command: wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && tar -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz environment: DOCKERIZE_VERSION: v0.5.0 - run: name: Wait for db command: ./dockerize -wait tcp://localhost:3306 -timeout 1m # Download and cache dependencies - restore_cache: keys: - foo-vendor-bundle-{{ checksum "Gemfile.lock" }} # fallback to using the latest cache if no exact match is found - foo-vendor-bundle- - run: name: bundle install command: bundle install --jobs=4 --path vendor/bundle - save_cache: key: foo-vendor-bundle-{{ checksum "Gemfile.lock" }} paths: - vendor/bundle # Database setup - run: name: init db command: RACK_ENV=test DB_YAML=tools/circleci/database.yml bundle exec rake db:initdb # run tests! - run: name: rspec command: RACK_ENV=test DB_YAML=tools/circleci/database.yml bundle exec rake spec
移行時のポイント
- MySQL コンテナの環境変数
MYSQL_ROOT_HOST
を指定して、テストを実行するコンテナから疎通可能とする - dockerize を利用して、MySQL が起動した後にテストが実行されるようにする
- restore_cache/save_cache を利用して、bundle install の結果をキャッシュして高速化
- Padrino の場合、DB 設定を
config/database.rb
に記述するため、DB_YAML
に database.yml のパスを渡したらそちらの設定を適用するようコードを修正
移行した結果
CircleCI 2.0 に移行したら、テストの実行時間が半分以下まで減りました :)