読者です 読者をやめる 読者になる 読者になる

クラウドワークス エンジニアブログ

日本最大級のクラウドソーシング「クラウドワークス」の開発の裏側をお届けするエンジニアブログ

将棋 + Git = Shogit

クラウドワークスでエンジニアをしている八木 ( @negito6 )です。

私は今年から、将棋のネット観戦が趣味になっています。最近では、映像に名前や顔が映らずとも、声や手の仕草だけで棋士の先生を判別できるようになってきました(だからどうってこともないですが・・・)。好きな解説の先生は、ズバリ!渡辺明竜王*1です。

「棋譜」と「検討」

(会社のエンジニアブログなので、普段の記事では以上のような軽い自己紹介をした上で技術的な内容に入ることが多いですが、今回はもう少しだけ続けます)

将棋では、対局の中のある場面でのいろいろな手のパターンを考えることを、「検討」と言います。こうすればもっと早く決着がついてたとか、ああすれば勝ち負けが逆転したしたのではないか、といったことを一人で考えたり、人と話し合ったりします。私自身も(棋力はさっぱりですが)強くなりたいので、自分が指した後は検討をすることがあります。

しかし、あれこれパターンを試していると、さっき考えたパターンが思い出せなくなったりしてきます。パターンは多分岐の木構造に枝分かれしていくので、紙に残すのもちょっと面倒で、どうにかならないかと悩むようになりました。盤面の変更を棋譜として順番に記録していきたいが、変更の各地点で枝分かれの可能性があり、進んでは戻り、また新しい枝を作り...と、ここまで考えると、将棋以外の手慣れた作業が思い出されます。そうですね。Git です。検討ついて記録することは、Git のブランチ・コミット操作と同一視できます。

というわけで、棋譜を Git にコミットして記録していくプログラムを作ってみることにしました。名前は Shogi + Git で安直に Shogit です。本記事では Shogit を作る過程と実装に関して簡単にご紹介したいと思います。

f:id:negito6:20160923120152j:plain

*1:2016年9月23日現在、竜王・棋王の二つを保持されている強豪の棋士です。解説としての人気も高く、将棋ファンからするとベタ中のベタな回答です。

続きを読む

レガシーなRubyコードのリファクタリングを支援するSutureの紹介

f:id:yosu1:20160914154128p:plain

はじめに

こんにちは、先日のRubyKaigi 2016に参加してきた@yosuです。 Ruby 3に向けた話題や幅広いテーマで楽しくとても刺激になりました。

そんな中僕が特に印象に残ったのが2日目のキーノート、Justin Searlsさんの「Fearlessly Refactoring Legacy Ruby」です。直訳すると「レガシーなRubyコードを恐れずリファクタリングする」でしょうか。

トークの内容も素晴らしかったのですが、そのトークをベースにTDD(トーク・ドリブン・デベロップメント)でSutureというGemも 作られていて、感動して触ってみたので今回はこちらのGemを紹介したいと思います。

スライドも公開されており(Surgical Refactors by Justin Searls)、こちらにこのGemを作った背景や目指すゴールについて書かれていますので是非見てみて下さい!

続きを読む

Herokuで本番サービスを運用する際にやっておきたいこと & 構成の事例

f:id:yo-iida:20160901110900p:plain

こんにちは、最近アルコールが入っていたらなんでもいいと思うようになってきた @yo-iida です。🍻

今回はみんな大好きHerokuのお話です。

サービス立ち上げ期に大活躍するHerokuですが、CrowdWorks内でもいくつかのプロダクトで本番までHerokuで運用しているサービスがあります。

今回は私が携わっている社内プロダクトでのtipsを紹介します。

  • やっておきたいこと
    • Heroku PipelineとReview appを使いこなす
    • 本番とデータ同期できるpreview環境を追加する
    • Heroku上のアプリケーションはすべてRAILS_ENV=productionで動かす
    • DBのバックアップ設定をしておく
    • Production Checkを行う
    • アプリケーションのビルドの仕組みを知っておく
  • 構成の事例
    • Standard以上のdynoを使用する
    • ミドルウェアはHeroku公式に寄せる
    • 監視系
      • ログ監視: PaperTrail
      • メトリクス監視: Librato
      • 外形監視: Pingdom
    • CDN: Fastly
    • DNS: PointDNS
    • addon以外のサービス
  • 最後に
  • We're hiring!
続きを読む

関数型言語初心者が「プログラミングElixir」を読んだ感想

唐揚げ好きエンジニアの那須(@nasum)です。

このたび、オーム社様より献本いただいた「プログラミングElixir」を読ませていただきました。

Elixirという言語があり、それが関数型言語であること自体は知っていたのですが、どういうものかよく知らなかったため今回読ませていただきました。

私の感想としましては、言語を問わずプログラミングをしたことがある人がElixir(あるいは関数型言語)に入門するための本として一番はじめに読むとうれしいし、別の本を読んだり使ったりした後、再度振り返りのために読む本としても適していると感じました。それに普通の技術書と違い筆者のElixirでのプログラミングを愉しんでもらいたいという気持ちが感じられて読んでいておもしろいのも特徴的だと思いました。こちらに語りかけてくるような文体は、頑張ってやってみようという気持ちにさせてくれます。

f:id:Tomato-360:20160829165542j:plain

ちなみに私は先ほども少し書きましたがElixirは名前ぐらいしか今まで知りませんでした。そんな人物が「プログラミングElixir」を読んだらどうなるかという気持ちでここから先読んでいただけると幸いです。

続きを読む

エラーモニタリングサービス Rollbar と GitHub Issue を利用したエラー対応フロー

f:id:uzuki-first:20160825142018j:plain *1

開発の所(@ctokoro_me)です。 インド音楽の演奏が趣味の一つなのですが、興味のある人が全然いない(そもそもインド音楽自体がほぼ知られてない)のが隠れた悩みです。

さて、みなさんが運用中のアプリケーションでは、エラーモニタリングはどのように行っているでしょうか? ログを tail / grep している感じですか?? それとも、エラーが起きたらメールが飛んで来るようになっているのでしょうか? どちらにしても、ユーザーが増えてくると管理が大変になってきてしまいますよね 😵

「一行のログの向こうには、一人のユーザがいる」 *2 という格言(!)もある通り、エラーが起きたということはそのユーザーがサービスを正常に使えていないということです。 しっかりと対応していきたいですね。

エラーモニタリングサービス

クラウドワークスではエラーモニタリングサービスとして Rollbar を採用しています。

rollbar.com

続きを読む

© 2016 CrowdWorks, Inc., All rights reserved.