codechrysalis’s blog

東京を拠点にした12週間の短期集中型ソフトウェアエンジニア養成学校です。

CircleCI を活用して生徒のコードレビューを自動化!

https://circleci.com/docs/2.0/hello-world/

コードクリサリスでは、生徒の進捗を確認するために、継続的インテグレーションユニットテストを活用し、教育プロセスの一部をオートメーション化することにしました。私たちのカリキュラムのテストカバレッジはほぼ100%であり、生徒には関わる全てのプロジェクトでテスト駆動開発(TDD)を実践することを強制しています。私たちは継続的インテグレーションを私たちの評価プロセスと統合し、迅速なコードレビューを生徒に提供し、インストラクターは生徒の状況を把握できるため、より良いフィードバックを提供することが可能になります。

継続的インテグレーションとは何でしょうか?なぜ必要なのでしょうか?

(https://aws.amazon.com/jp/devops/continuous-integration/)

継続的インテグレーションは、開発者が自分のコード変更を定期的にセントラルリポジトリにマージし、その後に自動化されたビルドとテストを実行する DevOps ソフトウェア開発の手法です。継続的インテグレーションという用語が最もよく使われるのは、ソフトウェアのリリースプロセスのビルド段階または統合段階を指す場合で、自動化の要素 (たとえば、CI やビルドサービス) と啓発の要素 (たとえば、頻繁に統合することを学習する) の両方が含まれます。

継続的インテグレーションの主な目的は、バグを早期に発見して対処すること、ソフトウェアの品質を高めること、そしてソフトウェアの更新を検証してリリースするためにかかる時間を短縮することです。つまり、

  • 長くて複雑な統合テストとはおさらば!
  • 問題の見える化
  • 問題の早期発見
  • デバッグの時間短縮と機能追加の時間拡大
  • 強固な基盤の構築
  • 自身のコードの動作確認のための時間軽減
  • 迅速に機能をリリース

現在2017年7月時点でよく知られている継続的インテグレーションは以下のサービスが挙げられます。簡単に良い点悪い点を挙げてみました。

良い点 悪い点
Jenkins 汎用性が高い
無料
全てコントロール可能
ラーニングコストが高い
サーバーと運用する人が必要
属人的になりやすい
CircleCI エンタープライズ版に無料版が有る
簡単に利用開始できる
Docker をサポート
バージョン 2.0 がまだベータ版
プレミアム版の料金プランが高い
TravisCI 対応しているプログラミング言語が豊富
Docker をサポート
プレミアム版の料金プランがCircleCIより高い
エンタープライズ版に無料版が無い

最終的に CircleCI を選択しました。主な理由は、

  1. 簡単に利用開始できる
  2. 料金が比較的安価(無料版も有る)

です。スタートアップには心強い味方です。

CircleCIの基本的なセットアップ

私たちの学生がプルリクエストを作成しそのコードに対してテストを自動的に実行します。

CircleCI の基本的な動作原理

f:id:codechrysalis:20170710195346p:plain

学生がGithub上でプルリクエストを作成するとGithubはWebhookを利用してプルリクエストの内容をCirleCIへPOSTします。CircleCIはDockerコンテナーを利用します。Dockerコンテナーを知りたい方はこちらを参照ください(https://www.docker.com/what-docker)。 端的に話をすると、Docker コンテナーはDockerイメージという環境のスナップショットを利用しており、実行すると独立した“コンテナー”という環境上でテストを行うことが出来ます。非常に多くの様々なコンフィグレーションがあり、Dockerを活用することでより簡単に、そして首尾一貫した開発プロセスにすることが可能になります。

チュートリアル(https://circleci.com/docs/2.0/hello-world/)にもある通りcircle.yml ファイルを用意して設定する方が一般的です。コンフィグレーションをファイルで管理でき、かつ設定がより柔軟に出来るためです。しかし、ファイルを利用せずにCircleCIの管理画面上で設定しました。その主な理由は学生に設定ファイルを見せないようにするためです。見せたくない理由は主に以下の通りです。

  • 設定を変更した場合fork/pull済みの学生に影響が出るため
  • プルリクエストに対応するテストと実行ツールは別のリポジトリに存在しており、学生になるべく意識させないため

CircleCI 上の設定

  1. CircleCI 上でプロジェクトを追加f:id:codechrysalis:20170710201252p:plain
  2. プルリクエストのみをビルド対象にするf:id:codechrysalis:20170710201236p:plain
  3. 環境変数を設定(セキュリティ上公開したくないため)
    • TEST_UTIL_REPO: git@github.com:codechrysalis/???.git
    • TEST_UTIL_PATH: utils
    • TEST_ID: exercise1 or else f:id:codechrysalis:20170710201339p:plain
  4. テストコマンドを設定
  5. 他のリポジトリをプルするためパーミッションを付与f:id:codechrysalis:20170710201243p:plain

Github の基本的なセットアップ

管理画面

  1. プルリクエストのみCirleCIへPOSTするように設定f:id:codechrysalis:20170710201015p:plain
  2. master ブランチへのマージを禁止f:id:codechrysalis:20170710201138p:plain
  3. テストが全て成功した場合のみ生徒のブランチのマージを許可f:id:codechrysalis:20170710201123p:plain

プルリクエストのサンプル画面

  1. プルリクエスト作成後f:id:codechrysalis:20170710200938p:plain
  2. テスト失敗時f:id:codechrysalis:20170710200927p:plain
  3. テスト成功時f:id:codechrysalis:20170710200847p:plain

うまくいかなかったこと

セットアップ自体はシンプルだったのですが以下の問題が出てきました。

  • CircleCI の詳細エラーを Github 上に表示することが出来なかった
  • 生徒がテストのエラーの詳細を知るには CircleCI へログインが必須

次回はこの問題をどのように対応したか記事にしたいと思います!

お問い合わせ

コードクリサリスに興味を持ちましたら是非こちらまでご連絡ください!hello@codechrysalis.io

プログラミングを学ぶことに興味を持ちましたら是非こちらでお申し込みをお待ちしております!

最後までお読み頂きありがとうございます。それではまた!!!

自身が心から共感でき、100%の情熱を持って取り組めるようなサービスの開発に携わりたいです!/第一期生(CC1)のクミコさん

f:id:codechrysalis:20170627084423j:plain

こんにちわ。コードクリサリスです。

第一期生(CC1)のインタビュー記事第1弾です。

プロフィール

愛知県出身。高校卒業後にカナダへ1年間留学。その後就職したゲストハウス会社でWebの力を目の当たりにしたことがきっかけで、Web関連の勉強ができる大学に入学。卒業後はSEとしてSIerに入社するものの、コードを書く機会がほとんどなかったため、Web業界へフロントエンドエンジニアとして転職。ソフトウェアエンジニアとして更なる成長を求めコードクリサリスに入学。現在に至る。

経歴を詳しくお聞かせください(主に、英語に関する話になっちゃいましたね)

幼い頃から海外に漠然と憧れを抱く少女でして(笑)。高校卒業後に2年間仕事をして資金を貯め、英語力向上の目的でカナダに留学しました。最初の1ヶ月は語学学校へ通ったのですが、生徒が多く費用対効果が悪いと感じたので、スピーキング専門の学校に転校したり、チューターレッスンを受けたり、現地人と一緒にバックパッカーで働いたりしながら、実践的な英語力を磨きました。日本に戻ってからは、英語を使ういくつかの仕事に就きました。

なぜプログラミングに興味を持ったのでしょうか?

帰国後、外国人専用のゲストハウス会社で働いていたのですが、同僚のWebデベロッパーが手がけた予約サイトが素晴らしくて、それをきっかけに会社が飛躍的に成長していくのを目の当たりにしたんですね。Webの力、プログラミングの力を感じ、私もそのようなスキルを身につけたいと考えるようになりました。

どのようにしてプログラミングを勉強したのでしょうか?

Webについての講義があり、かつ学費免除の奨学金制度がある大学を探して(笑)入学しました。メディアサイエンスという学部だったのですが、Web制作やJavaについて少し学ぶ機会がありました。その他にも、マーケティングやWebビジネスなど幅広く勉強しました。入学当時、私は既に27歳になっていたのですが、年齢は全く気にならず、他の学生に混ざって楽しい大学生活を送りました。

その後は?

卒業後、SEとしてシステムインテグレーターに入社しました。面接時には開発工程でコードを書くに携われると聞いていたのですが、実際のプロジェクトでは海外へのアウトソーシングがほとんどで、上流工程に携わるのみでした。コードを書く仕事以外はキャリアとして考えていなかったため、1年と数ヶ月で見切りを付け、フロントエンドエンジニアとしてWeb業界へ転職しました。

なぜコードクリサリスに入学を決めたのですか?

バックエンドを含めシステム全体を理解したい、ソフトウェアエンジニアとしてもっと成長したいという気持ちが強く、コードクリサリスへ申し込みをしました。スキルアップには様々な教材やアプローチがありますが、オフラインで集まり、対面でコミュニケーションをとりながらプロジェクトベースで学ぶのが一番効率的だと考えたこと、また、コードクリサリスはアメリカのコーディングブートキャンプの流れを組んでいたことに魅力を感じ、こちらに決めました。

プレコース期間中ですが感想をお聞かせください!

想像以上にハードで(笑)。JavaScriptはある程度理解していると思っていたのですが、読書課題のJavaScript本はすごく内容が深いですし、プロジェクト課題も難易度が高くて、驚きました。学びが多くてすごく楽しんでいます!まだ仕事もしているため、1時間早く起き、スキマ時間を活用しながら、課題に取り組んでいます。

将来の夢は?

自身が心から共感でき、100%の情熱を持って取り組めるようなサービスの開発に携わりたいです!

将来の仲間に向けてメッセージをください

まだまだ始まったばかりですが(笑)。そうですね、Webの業界は、素晴らしい学歴がなくても、経験がなくても、モチベーションと行動力さえあれば、必ずエンジニアになれると思います。ですので、少しでもこの業界に興味を持っていたら、悩まずすぐに行動に移してみてほしいですね。一緒に運命を切りひらきましょう!

クミコさん、ありがとうございました!これから本コースに向けて頑張ってください!

コードクリサリスに興味を持ちましたら是非こちらまでご連絡ください! hello@codechrysalis.io

お申し込みをお待ちしております!

第一期生の紹介

こちらが6人の愛すべき学生です!

f:id:codechrysalis:20170626152305j:plain

彼らを少しだけご紹介します!

  • 4人が女性で2人が男性
  • 3人がソフトウェアエンジニア、またはWebデベロッパーとしての経験あり
  • 2人がコンピューターサイエンスの学士号を保持
  • 2人がコンピューター工学とハードウェア工学の学士号を取得するために現在就業中
  • 1人がバイオメディカル工学の修士号を保持
  • 2人が以前英語教師の経験あり
  • 4カ国の出身者: 日本、イラン、アメリカ、カナダ
  • 1人は完全に初心者で、テクニカルアサイメントに挑戦する丁度1ヶ月前から勉強を開始

合格率

アメリカからアフリカのブルンジまで世界中から入学申し込みを頂けたことを非常に光栄に思っています。 全員が日本に訪れてプログラミングの勉強を望んでいましたが、最後には合格率は25%未満となりました。

キャリアチェンジ

私たちはプログラミング未経験の方々に対して入学を許可しませんが、ソフトウェアエンジニアとして共にキャリアチェンジを望む方々は、私たちのコーディングブートキャンプに申し込みを強くオススメします。私たちはプログラミングは素晴らしく、キャリアチェンジや起業家として独立することが可能なスキルだと信じています。

コードクリサリスに興味を持ちましたら是非こちらまでご連絡ください! hello@codechrysalis.io

プログラミングを学ぶことに興味を持ったあなた!是非お申し込みをお待ちしております!

最後までお読み頂きありがとうございます! それではまたお待ちしています!

オリジナル版はこちら

なぜ JavaScript か?

どんなアプリケーションもJavaScriptで開発出来る、次第にそうなるだろう。

Jeff Atwood, co-founder of Stack Overflow

f:id:codechrysalis:20170621160955p:plain

私たちのカリキュラムは JavaScript を使用するが特に JavaScript に依存してはいない。生徒たちはこの広大なテクノロジーという荒野を自分たちで探索して学ぶためのスキルを身につけ自信を付けることが出来る。私たちは基本に基づいて様々なものを構築することに注力しており、そのようなマインドセットを届けるのに JavaScript は最適な言語だと信じている。

なぜ JavaScript か?このような質問を非常に多く頂く。私たちの考えはこうだ。

JavaScript は昔とは違う

JavaScript は過去10年で信じられないほど進歩した。過去のJavaScript に対する誤った知識は非常に多い。しかしながら、AJAXの登場により JavaScript が復活を遂げ、劇的に成熟していくこととなった。また、Nodeの登場によりブラウザー以外にも益々 JavaScript が適用できる範囲が広がった。

JavaScript からは逃れることは出来ない!

Web アプリケーションの開発をする上では JavaScript は今のところ避けて通ることが出来ない。Ruby, PHPなどは避けて通れるが、JavaScript は決して避けて通れない。

全ての web ブラウザーJavaScript エンジンがビルトインされている。このようなある意味アドバンテージのある言語は他にはない。これがすぐに変わることはないだろう。

– 初心者にも敷居が低い

JavaScript はプログラミングを始めるのにはすごく簡単な言語である。前述したが、web ブラウザーがあるコンピューターには既に JavaScript エンジンが備わっている。つまり、セットアップがとても簡単であり、すぐに JavaScript を書き始めることが出来る。必要なものはブラウザーテキストエディタのみである。

高級言語ではない

JavaScript は 特別なコンパイラーやエディタを必要としないため高級言語ではなく、比較的早く実行でき、またクライアントサイドによる処理も可能である(通信やサーバーの負荷を抑えることが出来る)。

JavaScript コミュニティは革新的、活動的、そして優位性が有る

過去3年で、JavaScript は完全に成熟しており、偽りなく正に full-stack 言語になりつつ有る。コンスタントに新しい、オープンソースフレームワークやライブラリが登場し開発されている。A large portion of the most popular open-source repositories on GitHub are written in JavaScript. JavaScriptGithub で最も人気のある言語であるだけではなく、去年と比較して 97% も伸びている。以下に Github 上で最も活発なリポジトリのグラフがあり、 JavaScript が圧倒的にリーダーになっている。

f:id:codechrysalis:20170621160949p:plain

JavaScript が遠くない将来を支配している

繰り返しになるが、JavaScriptブラウザーの言語である。ブラウザーは私たちの日常において切り離せないものであり離れることは出来ない。つまりは、JavaScriptからも離れることは出来ない。 更に、JavaScript は巨大で強力な多くの会社によってサポートされており、個人や1つの会社によってコントロールされることはないため、より持続性のある言語になる。

– 流れは Web アプリと Mobile アプリへ

ブラウザーは更に強力になり、通信はより安く信頼性が向上する。注目すべき点はネイティブアプリから web アプリと mobile アプリへ流れが変わってきていることだ。

– 最後に

プログラミングを学ぶことに興味を持ったあなた!是非お申し込みをお待ちしております!

JavaScript: The World’s Most Misunderstood Programming Language by Douglas Crockford

Stack Overflow Insights

GitHub Octoverse

Quora: Why is JavaScript so popular?

The Principle of Least Power by Jeff Atwood

Why JavaScript: If You Could Learn Just One Programming Language, It Should Be JavaScript by Aziz Ali

オリジナル版はこちら