WEBエンジニア技術向上ブログスマートフォン用の表示で見るWEBエンジニア技術向上ブログこの広告は、90日以上更新していないブログに表示しています。2016-07-04CAグループ限定GO勉強会こんにちわ。CAリワード開発部の小高です。先日、CAリワードが主催するCyberAgentグループ限定のGo勉強会を実施しました。今回は、その時の熱気に満ちた会場の様子と、LT内容についてリポートしたいと思います。勉強会の様子それでは早速覗いてみましょう。!Go勉強会!!!勉強する意気込みがひしひしと伝わってきます。Goを扱う猛者たちは今か今かと目を光らせ会場入りしてきます。そんな中、Gopher君はいつもと変わらずゆる〜い感じで迎えてくれます。グッジョブGopher。今回はCAグループ限定という事もあり、「事前予約なし、会場にきてね!」という謳い。ここはGopher君が発する一言に模すなら「事前予約なし、会場にGoGo」だろ!と思う人も居たとか居ないとか。勉強会の時間がやってきたのですが・・・なんと!当初の想定を大きく上回る100人以上のエンジニアが集まり、グループ内でもGoに対する関心が高い事が伺えました。はい、その時の写真どん!!!おーーーーーっ!「Goをやってる」「興味がある」というエンジニアがグループ内でもこんなにいたんだ!とワクワクしてきます。同時に、ワタクシも気分が高揚してまいりました。!何を隠そう、今日はワタクシもスピーカーとして登壇する予定なのであります。高揚しない訳がありません。其の1(GoでつくるAbemaTV)初めに登壇いただいたいのは、AbemaTVの開発エンジニア「西尾」さんAbemaTVと言えば、皆さんご存知「無料でテレビ番組が見れるインターネットテレビ局」そんな注目のプロダクトを1から開発してきた西尾さんに登壇いただきました。今後を見据え、柔軟にシステム拡張できるよう設計してるのはさすがの一言でした。個人的に気になったのは、「外部ライブラリを使用する時には挙動を把握しましょう」という事。内部のシステムをいかにしっかり作っても、外部ライブラリで思わぬPanicを発生させたりするものが結構あるそうです。内製以外のライブラリを使用する際にはソースレベルで事前確認し、起こりえる症状をハンドルしないと危険だなと思いました。其の2(Go言語とDockerでAIバトル基盤を書いたら便利だった話)入社2年目にして堂々としたスピーチをしたのはアプリボットの「向井」さんリッチなUI部分のみCocos2d-xを使い、それ以外はほぼGolangで書いたという「ボンバー猛者」GoにAIの要素を盛り込み、4人対決のとあるゲームを作った話をしてくれました。デモンストレーションが始まったと同時に、昔なつかしBGMが流れてきて会場が笑いの渦に包まれます笑AIはアドテクスタジオも注目している分野なので、4プレイヤー全てが独立したAIで、どのように学習していくのかとても興味が湧きました。其の3(GAE/Goのススメ)GAEについて登壇していただいたのは、同じアドテクスタジオに所属するLodeoの「池田」さん。GAEとは、GoogleAppEnginenの略で、GoogleCloudで提供されるサービスの1つ。みなさん耳にした事がある人もいるでしょう、SaaS(サーズ)ですね。Editionの場合)動画元年という言葉が出たのも記憶に新しいですが、SGAを活用しての動画生成サーバの話は未体験領域なだけに興味深かったですね。其の4(10年物のレガシーPHPをGoにリプレイスしている話)同じCAリワードに所属するスーパーエンジニアのDaichiです。現行のレガシーPHPをGoにリプレイスした際の進め方や設計方針などをスピーチしてくれました。所属する「水沼」さんによる、インフィード広告でGoを採用した話。Javaベースで開発していたものが一段落し、技術チャレンジとしてGoを取り入れたようです。エンジニアもJava使いが殆どという中、敢えてGoでの開発に挑んだスピリッツ。「Go養成ギプス」と称した静的コード解析ツールを導入するなど、これからGoに移行していく企業にとっては、チームの技術力底上げという観点で非常にためになる内容だったと思います。〜生き残りをかけて臨んだGoの道〜)はい。ワタクシ「小高」です。PHPをメインとして主に管理画面の開発を行ってきましたが、このたびGoで配信システムの開発を行いました。今までフロントからバッチまでPHP一辺倒で書き倒す事が多かったですが、どうしてもバッチなどパフォーマンスが重要視される分野においては限界を感じていました。Goへの転身を果たし、配信サービスを作り切った話を発表させていただきました。〜中級者向けGo言語でよく引っかかる同期処理など周りの問題、分析と解決方法〜)最後はAmeba技術本部の「Mario」さんが登壇goroutineによるコードの間違いを会場の人達に当ててもらうという、他のスピーカーとは異なるアプローチで臨んでくれました。唯一の会場参加型で、問題のあるコードがどこか、みんなスクリーンに目を凝らして探しているのが印象的でした。goroutineで陥りやすい罠など、図解で説明していただきとても分かりやすかったです。今回の勉強会は参加者も多く内容も充実しており、まずは成功といったところではないでしょうか。良いも悪いも次に繋がるよい財産になったと思います。今後、「Goと言えばCAリワード」と言われるよう、社外にもアプローチしていこうと思いますので、その際はみなさん足をお運びくださいね。GulpWEBページに掲載されている広告ありますよね。あんな感じの広告をJavaScriptタグで配信する機能の開発を行っています。今回、プロジェクト内でGulp(ガルプ)を使っていたので、触れた感想について書きたいと思います。Node.jsのインストールGulpを使うにはNode.jsが必要です。公式サイトよりインストーラのダウンロードとインストールを行います。初回は下記コマンドでpackage.jsonを作成します。今回は既存のプロジェクトの為、既にpackage.jsonがありますので、この作業はスキップしました。initgulpfile.jsの作成このファイルに実行するタスクを記述していきます。今回は、ファイルに変更があったら自動で*.min.jsに圧縮するようにしたいと思います。});ポイントはパスの書き方。上記の場合は、修正したファイルと同じパスに.min.jsをディレクトリ再帰して吐き出してくれます。msこの状態でJSを改修すると、.min.jsが自動で出来ている事が確認出来ました。プラグインGulpは沢山のプラグインが出てますね。自分がよさそうだなと思ったのを紹介します。便利なサイトgulpfile.jsとpackage.jsonを自動生成してくれるサイト。steelydylan.github.ioまとめ今まで、JSとしっかり向き合う事があまりなかったです(反省)Gulpに代表されるような便利な機能を使うか使わないかでは、開発効率に大きく差が出てきますね。機械が出来る事は機械に任せて、人間にしか出来ない事をやる事でもっとラクしなければ!と思いました。普段通りプログラムしているだけで、自動で作業ログを収集しグラフで可視化してくれるツール「WakaTime」を入れてみました。これを入れると自分がどれくらいの時間、どの言語で開発しているかなどが可視化されて、プログラムに費やした時間などが分かるようになります。wakatime.comサポートしているIDEも多数!普段使っているエディアがそのまま使えます。自分はターミナル操作を行う事が多いので、今回はbash用のものをインストールしました。IDEsから使用するエディタを選択します。30実際にターミナル上で何か作業をしてみると、こんな感じで可視化してくれました。GOの開発の時にはIntelliJを使うので、同様にIntelliJにも入れてみました。Gitのリポジトリ単位で集計してくれるので、各プロジェクトのアクティブ状態が分かります。プロジェクト全体の作業時間などを可視化出来て面白そうです。sample.go13main()が終了すると共に終了となる。true3メッセージを受信するまでWaitし、順番に処理される事が確認できました。受信結果を受け取ると、第一引数にメッセージ、第二引数に受信結果を受け取れます。TOURからの拝借コードとなりますが、自分自身の備忘という事で。検証Elixirとは読み方はエリクサー。Erlangという言語で実装されている。Rubyライクな文法で書ける。http://elixir-ja.sena-net.worksElixir(本家)http://elixir-lang.orgErlangとは読み方はアーラン。Elixirの元になった言語。3人によって最初のバージョンが作られた「ジョー」と「ロバート」と「マイク」が俺らで時代変えてやろうぜ!AhHa?っていって(私の勝手なイメージ)、一念発起して開発した言語がErlang。モノはいいのに流行らなかった。Katz)が、ErlangがJavaよりも速くならない理由はどこにもありません。その奇妙な構文が人々を遠ざけ、普及と商用投資を妨げています。私はErlangが好きです。性能が重要なコンポーネントでの利用は少なくしますが、今後も致命的に重要なコンポーネントに使うつもりです。Erlangが流行らないのは要は分かりにくいからとの事。書き方にクセがあり難易度高めだけど、並行処理とか分散処理に向いていて、これをRubyライクに分かり易くしたのがElixirだ。年に31.54ミリ秒しかダウンしないようです。裏でこういうシステムでしっかり構築されてるんですね。GolangにもGOルーチンという並列処理を容易に行う仕組みがあります。今回はこの2つの言語で並列処理をさせ、どちらがスループットが出るか検証してみたいと思います。"hello"hello:okiex(2)>Elixirもインストール出来ました。1.6検証方法サブルーチンで10000回ループするだけの処理を10000回並走させ、スループットを計測したいと思います。}loop.exsアップデート中。0m0.025sloop.exsアップデート中。PHP職場にKafkaが導入されました。今後触れる機会がどんどん増えてくるので、実際にVagrant環境にKafkaを入れて使ってみました。4.3VirtualBoxのVersionが5.0にあがったようだが、インストールされているVagrantバージョンが対応していない模様。Vagrant!バージョンアップに成功したので、気を取り直して改めて。foundと、ここでJavaのRuntimeエラー。・Kafkaも問題なく起動Topicの作成Topicは送信側と受信側がやり取りするメッセージボックス名称。今回は「sample」としました。"sample".topicが作成され、送受信の為の必要最低限の準備が整いました。GO(受信)で実装してみる今の職場の環境がこれに近いので、実際にPHP側でメッセージを送り、GO側でメッセージを受け取る処理を実装してみました。phpkafka]$Kafkaのモジュールが追加されました。test.".$i);}GOクライアントライブラリいくつかあるようですが、今回はこちらを使ってみました。Goもくもく会2/15(月)、株式会社エウレカさんが主催するGoもくもく会に参加してきました。会場は明るい雰囲気でとても清潔感があり、エンジニアにとっては開発し易い環境だなぁと思いました。いった環境作りって大事ですよね。eure.connpass.comプログラム最初の2時間がGOをもくもくといじる。前半2時間は、もくもくするか、特定のお題目に沿ったプログラムを作るといった内容でした。駆け出しGoプレイヤーの私は勉強がてらこのお題目にチャレンジしてみる事にしました。実装すべき機能要件は上記。1つずつ紐解いて実装していこうと思います。同じ数値は使えないこの要件を満たす部分を実装しました。nums}PHPが長かった私にとっては「ランダムな一意な4桁数値を発番」を実装するのにひと苦労。使う関数やアルゴリズムはライブラリ化していくなり何なりで足元固めていく感じかなーっていう印象でした。数値は0〜9までの数値で同じ数値は使えない問題なく動作しました。ここで一気に作り込み。残りの入力値チェックと、ヒット&ブロウの突き合わせ部分を実装してみました。みなさんもチャレンジしてみてくださいね。最後に10名くらいの方と名刺交換を行い、導入事例などを聞いてきました。実際のサービスでGOを動かしているプロダクトはまだあまり無いようで、お話しさせていただいた中では、これから導入を検討しているという方が9割程占めていました。あと、新しいシステムをGOで作るというよりも既存システムをGOリプレイスしたいという声が多かったですね。導入実績はどんどん増えてくると思うので、これからの可能性を存分に秘めてるなと感じました。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。