「敢闘賞」&「ブログ賞」記念ランチに行ってきました!

こんにちは。2017年度第4クオーターの「ブログ賞」を受賞しました、宮西です。

先日、開発室内でクオーター毎に決定している「敢闘賞」および「ブログ賞」の記念ランチに行ってきました。 この記念ランチでは、弊社執行役員の鶴飼から、豪華なランチをプレゼントしてもらうことができます! 今回のブログでは、各賞の紹介と、記念ランチの模様をお伝えしたいと思います。

「敢闘賞」とは?

ウィルゲートでは、社員の功績を称えて行動の指針とするための取り組みとして、 クオーター毎に社員表彰が行われています。 それに加えて開発室では「敢闘賞」という賞を設け、 開発室内で最も成果に貢献した人物を表彰する取り組みが行われています。

敢闘賞では、まず月毎にノミネート者が選抜されます。 その後ノミネート者の中から、そのクオーターの敢闘賞が選ばれます。

2017年度下期は、第3クオーターに三島 正三、f:id:miyanishi-yuki:20180802162330j:plain第4クオーターに岡田正平が選ばれました。 f:id:miyanishi-yuki:20180802162325j:plain

「ブログ賞」とは?

「ブログ賞」とは、この WILLGATE tech blog に投稿された記事に与えられる賞で、 期間内に投稿された記事が選抜対象となります。 選抜基準は2種類あり、

となっています。

この賞は、 WILLGATE tech blog がはてなブログに移行した、2017年第4クオーターに新設された賞となります。 私は、3月に投稿した「JavaScript のグラフライブラリ比較 - 私達がChart.jsからHighchartsに乗り換えた理由 -」の記事でバズ賞&ロングテール賞の2つを受賞することができました。

tech.willgate.co.jp

とんかつに舌鼓!ランチの様子

今回お邪魔したのは、会社からほど近くの「かつ吉 渋谷店」さん。

www.bodaijyu.co.jp

こちらはとんかつ専門店。 食べログの評価も3.59(2018/08/10 時点)と大変高く、特にお昼は予約をしないと入れない人気店です。

f:id:miyanishi-yuki:20180802163655j:plain

こちらは鶴飼執行役員が注文した「特製厚切りかつ丼」です。 写真では分かりにくいですが、丼がとても深く、ボリューム満点です。

f:id:miyanishi-yuki:20180802163719j:plain

こちらは、岡田、三島、私が注文した「国産銘柄豚ひれかつ定食」です。 お肉がとっても柔らかく、衣もさっくりしていてしつこさを感じません。 通常の白米と、青しそまぜごはんを選べるのもありがたいです。

ごはんを食べながら、賞を取った時の取り組みや考えていたこと、今後どんなことをやっていきたいかなどを話しました。 真面目な話から他愛もない話まで、いろんな話ができた1時間半でした。

f:id:miyanishi-yuki:20180802163931j:plain

ごちそうさまでした!

【スライドあり】LT会 兼 交流会「Hacker's GATE Beer Bash!!!!」の様子をご紹介します!!【写真あり】

こんにちは!新卒3年目のエンジニア、宮西です。今年度に入ってからは、社内勉強会の運営メンバーとしても活動しています。

ウィルゲートの社内勉強会は「Hacker's GATE」という名前が付けられており、 毎月1回開催している社内LT会を中心に活動を行っています。

tech.willgate.co.jp

また社内に留まらず、社外の方をお招きしてのイベントも今までに2度開催してきました。

tech.willgate.co.jp

tech.willgate.co.jp

今回のブログでは、7月19日に開催したLT会 兼 交流会「Hacker's GATE Beer Bash!!!!」の様子をご紹介します!

初のオープン開催!「Hacker's GATE Beer Bash!!!!」について

「Hacker's GATE Beer Bash!!!!」では新しく挑戦したことが2つありました。

1つは、LTよりも交流をメインにしたことです。今まで社外向けに開催したHacker's GATEのイベントはLTが中心の「LT会」でした。 しかし、LTを真剣に聞いている時間が長く、せっかくの交流の機会を長く取れないという悩みがありました。 そこで今回は、LTの件数を3件に絞ることで交流の時間を長く作るようなタイムスケジュールを組みました。

もう1つの挑戦は、オープンに集客を行うことです。今までHacker's GATEとして開催したLT会はすべてクローズドなイベントで、 参加者の方はウィルゲート社員とつながりのある方だけでした。 今回はconnpassでイベントページを作成し集客を行ったことで、今までウィルゲートを知らなかった方々にも来ていただくことができました。

そして、「Hacker's GATE Beer Bash!!!!」でこだわったのは会のテーマです。 今回は「あのサービス誕生秘話を聞いてみよう」というテーマを設定しました。 これは、単純な技術の話ではなく「サービスの中で生きている技術」についての情報交換ができることを期待して設定しました。 その期待通り、より踏み込んだ内容や「サービス」に焦点を当てた発表が多く、新鮮なLT会となりました。

実際の「Hacker's GATE Beer Bash!!!!」の様子

ここからは、実際の「Hacker's GATE Beer Bash!!!!」の当日の様子について、写真で紹介していきます!

f:id:miyanishi-yuki:20180724104059j:plain f:id:miyanishi-yuki:20180724031649j:plain LT発表中の様子です。 皆さん、お酒やおつまみを片手に、真剣にLTに聞き入っています。

ウィルゲートからは、新卒1年目で新規メディア立ち上げのPMを務めた吉田さんが発表しました(写真1枚目)

tech.willgate.co.jp

PM業務の中でも、デザイナーとエンジニアの連携の部分に焦点を当てた発表でした。 発表スライドはこちらです。

speakerdeck.com

f:id:miyanishi-yuki:20180724031825j:plain f:id:miyanishi-yuki:20180724031811j:plain 質疑応答の時間も様々な質問が飛び交いました。

f:id:miyanishi-yuki:20180724031808j:plain f:id:miyanishi-yuki:20180724031703j:plain f:id:miyanishi-yuki:20180724031826j:plain お待ちかねの交流会!いろんなところで笑いが起こり、活発な交流の場になっていました。

f:id:miyanishi-yuki:20180724031824j:plain 締めの様子です。この後もしばらく話が盛り上がり、2度目の締めまでたっぷりお話ししました。

最後に

今後もHacker's GATE運営では、社外への発信を目的としてLT会や交流会を開催していく予定です。 次回の開催時のご参加を、心よりお待ちしております!!

インフラ配属の新卒エンジニアが入社後3ヶ月でやってきたこと 【新規技術・ホスティング先移行編】

インフラ配属の新卒エンジニアが入社後3ヶ月でやってきたこと 【IaC編】の後編です!

前編はこちら↓

tech.willgate.co.jp

新規技術の検証・導入

1. Capistrano から AWS CodeDeploy へ

ウィルゲートではこれまで、アプリケーションのデプロイには Capistrano を利用していました。 しかし、せっかくなら AWSSaaS を利用してデプロイ作業を自動化させようということで、 AWS CodeDeploy を利用することにしました。

アプリケーションのソースコードを対象のブランチにマージした際、 CI ツールが動き AWS S3 へ ZIP ファイルとして配置します。 また、 S3 へ配置したと同時に CodeDeploy を実行させることで、 CodeDeploy は S3 から最新のソースコードを取得しデプロイを実行します。

これまで利用していた Capistrano は In Place デプロイを行うため、多少のダウンタイムや新旧が混在する時間が生まれてしまいます。 しかし、 CodeDeploy を利用することで Blue/Green デプロイが可能となり、ダウンタイムゼロのデプロイ環境を構築することができました。

f:id:tkhttty:20180619135143p:plain
デプロイフロー

2.( Packer + Terraform )+ Ansible

CodeDeployを利用して Blue/Green デプロイを行う際、上図のように既存のオートスケーリンググループ とは別のオートスケーリンググループ を作成します。

しかし、AWS が提供しているオートスケーリングは、スケールアウトした際にあらかじめ起動設定として指定した AMI を元にインスタンスを生成するため、 nginx や users などの設定がされていないまっさらなインスタンスが出来上がります。

そのため、スケールアウトし web アプリケーションが乗っかっていても web サーバが入っていないという事態に陥ってしまうことがあります。

そこで、 「Packer」 を活用して上記の問題を解決することにしました。

f:id:tkhttty:20180619134426p:plain
スケールアウト時のインスタンスの状態

■Packer とは

  • HashiCorp 社が提供している OSS
  • EC2 インスタンスを作る際のマスターイメージ( AMI )を作る
  • ビルド時に Ansible を流すことも可能
  • 構成ファイルは JSON ひとつだけ

上記に書いた通り、 Packer は AMI を作成する際に Ansible を流すことができるため、一通りの設定がすでに完了したイメージを作成することができます。

Packer で作成した AMI を起動設定としたオートスケーリンググループ を Terraform から作成することにより、スケールアウトしても一通りの設定が済んだ状態でインスタンスが作成されるようになりました。

3. AWS Lambda の導入・連携

前述した CodeDeploy を利用するにあたり、デプロイの進行状況が AWS の管理画面を確認しないと分からないという問題がありました。

そこで、 AWS Lambda を活用し、デプロイのステータスが変わるごとに Slack へ通知するようにしました。

AWS Lambda とは

サーバーをプロビジョニングしたり管理しなくてもコードを実行できるコンピューティングサービス。 AWS SNS や SQS 、 S3 のイベントをトリガーとして Python などのスクリプトを実行することができる。

f:id:tkhttty:20180619135111p:plain
Lambdaを活用したデプロイ通知のフロー

結果、 CodeDeploy の進行状況が都度 Slack に対して通知がくるので、一目でデプロイ状況が確認できるようになりました。

f:id:tkhttty:20180619135215p:plain
デプロイのステータス通知

標準開発環境のホスティング先移行

最後に余談ですが、ウィルゲートの開発室では標準開発環境と呼ばれる1人1つの自由に使うことができる開発環境を提供しています。

これまでは、契約している専用サーバで開発環境を提供しており、Windows の vSphere クライアントから仮想環境の構築やコピーを行っていました。 しかし、専用サーバのリソースの問題や環境のコピーに時間がかかるなどの問題から、標準開発環境を専用サーバから全て AWS EC2 へ移行を行いました。

個々人のインスタンスは全て Terraform で構成・管理されており、誰かのインスタンスをコピーして欲しいという要望に対しても、迅速に対応することが可能となっております。

おわりに

まだ入社して間もない私ですが、様々なことにチャレンジさせて頂ける環境があることに対し、とてもやり甲斐を感じています。

これからも新しい技術に触れていき、より組織に貢献できるよう頑張っていきます!

インフラ配属の新卒エンジニアが入社後3ヶ月でやってきたこと 【IaC編】

こんにちは。 2018 年度新卒入社で開発室インフラチームに配属された高畑です。 今回は、入社して 3 ヶ月が経過した今までにやってきたことを振り返っていきたいと思います。

Infrastructure as Code(IaC)の活用

現在、ウィルゲートで運用しているメディアサービスは、「Terraform」と、「Ansible」を利用して各種サーバの構成を行なっています。

■Infrastructure as Code(IaC)とは

インフラの構成管理をコード化し、 Git 管理やプルリク(レビュー)、 CI などソフトウェア開発のプラクティスを適用すること。

■Terraform とは

  • HashiCorp 社が提供している OSS
  • 管理画面触らなくてもコード 1 つで AWS EC2 などの SaaS 環境が構築できる
  • 冪等性がある
  • tf ファイルで構成を記述

■Ansible とは

  • RedHat 社が提供している OSS
  • サーバのミドルウェアをコードで管理・構築ができる
  • 冪等性がある
  • 構成ファイルは yml
  • Dynamic Inventory がアツい

手作業でインフラ環境を構築するとなると、台数が少ない分には問題ないのですが多くなっていくにつれて各種サーバのパラメータなどの構成管理が難しくなっていきます。

また、インフラの構築手順を手順書に纏めたとしても、手作業による設定・作業ミスが起こるリスクがあり、結果障害へと繋がっていきます。

そこで、インフラの構成をコード化し自動で設定できるようにすることで、手作業による作業ミスがなくなり、また誰が実行しても同じ状態のインフラ環境が構築できるようになるため、より安全に構成を変更できるようになります。

私自身、 IaC に関してはウィルゲートに入社してから触るようになったのですが、 web メディアの運用保守や運用改善を行う際にサーバの構成が書かれた Ansible のコードを修正してレビューをしてもらうのはとても新鮮でした。

f:id:tkhttty:20180619170935p:plain
コードレビューの様子

インフラセクションでの取り組み

TerraformやAnsibleなどの技術についてどのように活用したのか、またどのように使用すると良いのかをインフラチーム内でナレッジの共有を定期的に行っています。

また、後編で紹介する新規技術についても、技術検証した結果や実際に使用してみた事例などを共有して、他のプロジェクトに活かせないかを議論しています。

f:id:tkhttty:20180619175816j:plain
インフラセクションの様子

後編はこちら↓

tech.willgate.co.jp

CakePHP1系からCakePHP3系へ移行した直後に起きたサービス障害と学び

f:id:toropoko002:20180717200616j:plain

はじめに

18年度新卒の垣花です。

僕は現在サグーワークス開発チームに所属しています。

インターン時代に過去に発生した障害の事後対応を行ったことがありました。

内定者がチャレンジ!遠方インターンで事業と会社を知る - WILLGATE tech blog

今回はその障害の内容とそこからの学びを紹介しようと思います。

障害の背景

サグーワークスではCakePHP3系へ移行した直後に、ユーザの生年月日を登録できるページを作成し、以下のように保存処理を書いていました。

<?php 
    # CakePHP3
    $birthday = '1969-01-01';
    $userTable = TableRegistry::get('Users');
    $user = $userTable->get($userId);
    $user->birthday = date("Y-m-d H:m:s", strtotime($birthday);
    $userTable->save($users);
?>

この処理を通して1969年が誕生日のユーザが保存されると、2069年が誕生日として保存されてしまっていました。

障害の原因を調査後に下記のように修正することで無事1969年生まれとして誕生日が保存されます。

<?php 
    # CakePHP3
    $birthday = new Time('1969-01-01');

    $userTable = TableRegistry::get('Users');
    $user = $userTable->get($userId);
    $user->birthday = $birthday->i18nFroamt('yyyy-MM-dd HH:mm:ss');
    $userTable->save($users);
?>

なぜ障害が発生したのか

2069年として保存されてしまう原因を調査した結果、下記のことがわかりました。 問題点について順番に説明していきます。

  • CakePHP1系とCakePHP3系のfind結果の違い
    • datetime型がCakePHP1系ではstringが、CakePHP3系ではFrozenTimeClassのオブジェクトが返ってくる
  • strtotimeの仕様
    • 年を下2桁で指定した場合に2069年など、未来の年月日のunixtimeが出力されてしまう。
  • FrozenTimeClassの仕様
    • マジックメソッドである_toString()が下2桁の年を返す

CakePHP1系とCakePHP3系のfindの違い

まずはfind結果を見比べてみます。

今回は関係ありませんが、CakePHP1系は結果が配列で返ってくるのに対し、CakePHP3系ではEntityClassのオブジェクトが返っていますね。

見るべきポイントは"birthday"がどのように返ってくるのかです。

CakePHP1系ではstringで、CakePHP3系ではFrozenTimeClassのオブジェクトが返っています。

<?php
    # Cakephp1
    $this->loadModel('User');
    $example = $this->Users->find('first', ['fields' => ['birthday']]);
    var_dump($example);
?>
    /* 出力結果
    * array (size=1)
    * 'User' =>
    *   array (size=1)
    *     'birthday' => string '1969-01-01 18:00:00' (length=19)
    * /
<?php 
    # Cakephp3
    $Users = TableRegistry::get('Users');
    $example  = $Users->find('all')->select('birthday')->first();
    var_dump($example);
?>

    /* 出力結果
    * object(App\Model\Entity\User)[1346]
    *   public 'birthday' =>
    *     object(Cake\I18n\FrozenTime)[1335]
    *       public 'time' => string '1969-01-01T18:00:00+09:00' (length=25)
    *       public 'timezone' => string 'Asia/Tokyo' (length=10)
    *       public 'fixedNowTime' => boolean false
    *       ...
    * /

CakePHP3系の場合、FrozenTimeClassはDateFormatTraitを読み込んでいるので、i18nFormatが使えるためデータのフォーマットが簡単ですね。

<?php 
    # CakePHP3
    $Users = TableRegistry::get('Users');
    $example  = $Users->find('all')->select('birthday')->first();
    var_dump($example['birthday']->i18nFormat('yyyy-MM-dd HH:mm:ss'));
?>

    /* 出力結果
    * string '1969-01-01 18:00:00' (length=19)
    */

一方CakePHP1系の場合、string型の日付だと以下のようにフォーマットしなければいけません。

<?php
    # CakePHP1
    $this->loadModel('User');
    $example = $this->Users->find('first', ['fields' => ['birthday']]);
    var_dump(date("Y-m-d H:m:s", strtotime($example['User']['birthday'])));
?>

    /* 出力結果
    * string '1969-01-01 18:00:00' (length=19)
    */

strtotimeの仕様

PHP Manualのstrtotimeのページをみていると以下の注意事項が書かれています。

年を 2 桁の数値で指定した場合、その値が 00-69 なら 2000-2069 に、 70-99 なら 1970-1999 にそれぞれ変換されます。

PHP: strtotime - Manualより引用

今回の障害の対象となったユーザの誕生日が1969年です。

00-69の間は2000-2069年としてunixtimeに変換される為、下2桁だけ見ると00-69の間に入っていました。

次はFrozenTimeの設計をみていきます。

FrozenTimeClassの仕様

FrozenTimeにはDateFormatTraitが読み込まれているので、DateFormatTraitを確認してみます。

cakephp/FrozenTime.php at 3.2.10 · cakephp/cakephp · GitHub

マジックメソッドの__toStringが存在していました。返り値はi18nFormat()の返り値です。

<?php
    # DateFormatTrait.php
    public function __toString()
    {
        return $this->i18nFormat();
    }
?>

cakephp/DateFormatTrait.php at 3.2.10 · cakephp/cakephp · GitHub

i18nFormat()では$formatを引数として渡さない場合、$ _toStringFormatを日時の形式として使っています。

<?php 
    # DateFormatTrait.php
    public function i18nFormat($format = null, $timezone = null, $locale = null)
    {
        $time = $this;
        if ($timezone) {
            // Handle the immutable and mutable object cases.
            $time = clone $this;
            $time = $time->timezone($timezone);
        }
        $format = $format !== null ? $format : static::$_toStringFormat;
        $locale = $locale ?: static::$defaultLocale;
        return $this->_formatObject($time, $format, $locale);
    }
?>

cakephp/DateFormatTrait.php at 3.2.10 · cakephp/cakephp · GitHub

DateFormatTraitを読み込んでいたFrozenTimeClassに戻ってみると$_toStringFormatのデフォルトが設定されています。

# FrozenTimeClass
protected static $_toStringFormat = [IntlDateFormatter::SHORT, IntlDateFormatter::SHORT];

cakephp/FrozenTime.php at 3.2.10 · cakephp/cakephp · GitHub

IntlDateFormatterClassの定数としてSHORTが呼び出されているのでみてみると、12/13/52のような日時形式が定義されています。

年が下2桁で表現されていたようです。

<?php
    # IntlDateFormatterClass
    /**
    * Most abbreviated style, only essential data (12/13/52 or 3:30pm)
    * @link http://php.net/manual/en/intl.intldateformatter-constants.php
    */
    const SHORT = 3;
?>

3つの問題点のまとめと問題点を踏まえた解決策

以前CakePHP1系からCakePHP3系へ移行に関しての取り組みをブログ記事で紹介しましたが、サグーワークスでは長期間CakePHP1系で開発をしてきていたことで移行後すぐはまだCakePHP1系の方法で日付をフォーマットしていました。

PHPフレームワークのバージョンを上げるための取り組み - WILLGATE tech blog

そのため、CakePHP1系のfind結果を想定してCakePHP3系のFrozenTimeオブジェクトを日付フォーマットしたため以下のようなことが起こっていました。

$user['birthday']はFrozenTimeClassのオブジェクトのため、文字列出力しようとすると"1969/01/01"が"01/01/69"としてフォーマットされてしまいます。

その後、strtotime()の引数として"01/01/69"が渡り、2069年として解釈されstring型でunixtimeの"3124256400"が返ります。

そのunixtimeをdate()で見やすいようにフォーマットすると、2069年生まれのユーザが誕生してしまいます。

これらを踏まえると以下の点に気をつけることで未来に生まれるユーザの発生を防げます。

  • 年を下2桁の形式で取り扱わないこと
  • CakePHP3系ならTimeClassで定義されている関数を用いること(find結果のカラムがdatetime型であればFrozenTimeClass)

最初に紹介したコードの解決策として以下のように修正しました。

<?php
    # CakePHP3
    $birthday = new Time('1969-01-01');

    $userTable = TableRegistry::get('Users');
    $user = $userTable->get($userId);
    $user->birthday = $birthday->i18nFroamt('yyyy-MM-dd HH:mm:ss');
    $userTable->save($users);
?>

終わりに

CakePHP1系からCakePHP3系のfind結果が同じだろうとこれまで通りの実装してしまうことはあっても、strtotimeの仕様やFrozenTimeClassの設計を把握していれば防げた問題だろうと思います。

納期の問題などで言語やフレームワークの全ての仕様を把握することは膨大で難しいですが、今回のような障害を防ぐためにも利用する関数の仕様だけでも把握することが大切です。

内定者がチャレンジ!遠方インターンで事業と会社を知る

サグーワークス開発チームの石川です。

今回は18卒エンジニアの垣花さんに、選考時の会社の印象や、インターンでの経験、今後の目標についてインタビューしたので、その模様をお届けいたします。

f:id:char1129:20180711161837j:plain

自分が選考を受ける上で、大事にしていたポイント

--- 就職活動中、内定者時代の垣花さんは、ウィルゲートについてどういう印象でしたか?

 ウィルゲートについては大学の先輩が働いている会社ということは知っていました。最初ウィルゲートの話を聞いた時は、エンジニアが大勢いる会社ではなく、総合職の方や営業の方がいて、どちらかというと体育会系的なノリが強い会社だなという印象を持ちました。会社の様子を面談中に人事の担当者に聞いた後は印象が変わり、「社員を大切にしている会社」と思うようになりました。「社員を大切にしている会社」というところが、自分が選考に進む上で大事にしたいポイントで、合致していたので、面接を受ける決意をしました。  また面接や社員面談の過程で、社内でエンジニアが総合職の社員と協力して事業を作っている様子や、社員が成長するための人事制度の話を聞いて、ますます惹かれていきました。

--- 内定時に持っていた印象と夏休みを利用したインターンの後の印象は大きく違いましたか?

 印象という点で言うと、期待していたよりも良い印象を持つことができて、入社への期待が膨らみました。というのも、面談・面接の過程で社員の方から聞いていた、会社内部の様子は決まって「いい人が多いよ」という返事をもらって、どこまで信じたらいいんだろうとずっと疑問に思っていました(笑)  ただ、実際にインターンで開発室のみなさんや、事業部の方とお話しさせてもらって、親切で、人との心の距離が近い「アットホームな職場」という印象を受けました。仕事中に困ったことがあれば、親身になって解決策を一緒に考えてくれる人がいたり、チームとして働いている雰囲気はすごく楽しく、インターンの限られた時間でも、充実した時間を過ごすことができました。

チームの一員として協力しているという実感を持って仕事に臨めた

--- 10月からリモートでのインターンが開始しましたが、経緯について教えてください。

 もともとリモートでの仕事であったり、リモートでの開発に興味がありました。そこで、夏にインターンしていた時に、リーダーの横道さんに飲みに連れて行っていただいた際にお話ししてみました。

 同じくらいのタイミングで自分の友人もリモートインターンという形で働いていて、現場の社員さんと一緒に仕事していることや、技術的に得たことを話してくれたのをきっかけに、自分もやりたいと思い、お酒の席で相談してみました。  すると、翌日くらいには横道さんから当時GMだった鶴飼さんにまで話を伝えていただいて、すぐにリモートでのインターンの準備が進みました。こういうテンポの良さを知れた時、ウィルゲートはベンチャーらしいスピード感を持っている会社なんだなと思いました。

f:id:char1129:20180628141841j:plain

--- 私の時はそういったことはできなかったと思うので、羨ましいですね。周りの反響はありましたか?

 僕も同じことを色んな人に言われました(笑)

 改めて自分は恵まれているなと思いました。このご縁もあって、先日社内のHacker’s Gateでも登壇させていただいて、社内での事例作りに貢献できたのは嬉しく思ってます。

-- インターンの質問に戻りますが、実際働いてみて、リモートとリアルな現場の違いは何かありましたか?

 結構違いましたね。実際現場だと相手の表情を伺って、画面と言葉を駆使してコミュニケーションをとることができるのですが、リモートだと、どうしてもテキストベースのコミュニケーションになってしまいます。なのでコミュニケーションの方法について、いろいろ模索しながら行っていきました。

 例えばSlackでのコミュニケーションは、固くなりすぎないように注意したり、アイコンを利用して、無感情なテキストにならないようになどは注意しました。

 実装物に関しても事業部の方にどう伝えれば動きだったり仕様を伝えられるだろうかと考えるようになりました。そのなかで、効果的だったのはイメージを利用することで、スクリーンショットを撮って文字を書き込んでみたり、画面を録画して、アニメーションGIFで共有したりすることで、挙動の確認や仕様の確認をしてもらうことをしました。

 また実装時の品質を担保するために、テストケース・テストコードについてもチームの方にご指導いただきました。なので、リモートでのインターンを通じてコミュニケーション面での成長、エンジニアとしてのスキル面での成長につながりました。

 こういった機会で、チームの皆さんの全面協力をしていただいたので、リモートでもチームの一員として協力しているという実感を持って仕事に望めたことがすごく良かったです。本当に協力していただいた皆さんに感謝しています。

f:id:char1129:20180628153139j:plain

自信を持って、自分が作ったものをリリースしたい!

--- 最後になりますが、今後の目標について教えてください!

 僕個人として、技術的なチャレンジを続けて、開発室や会社の事業に貢献をしていきたいです。そのためにも、まだまだ学ぶことが多く、色んな人のサポートの上で今は業務ができている状態なので、早く一人前になって、自信をもって自分達が作ったプロダクトをリリースができるようになりたいです。

ウィルゲートエンジニアの開発環境事情

こんにちは。
今年の5月にウィルゲートに入社してサグーワークスの開発チームに配属された藤田です。
ウィルゲートでは入社時にWindowsMacのノートPCを選ぶことが出来て、モニタ1台とOfficeやセキュリティソフトが設定されている他は自由です。
なので、エンジニアではキーボードやマウスは自分が使い慣れたものを使用している方が多いです。
そこで今回は、私自身もウィルゲートの開発チームをより深く知るために、開発チームの皆さんが普段どんなツールを駆使して、日々開発を行っているのかをご紹介します。

メディアサービス主幹エンジニアのMさん

使っているハードウェア(デスク周りの使用物)

キーボード:ErgoDox EZ
ウィルゲートのエンジニアでは、キーボードやマウスなど周辺機器にこだわる人が多いのですが、ErgoDox EZを使っているのは他にいませんでした。
エンジニア感あるデスクですね。

f:id:fujita-takumi:20180628130928j:plain


使っているソフトウェア

開発用エディタ:PHPStorm
JetBrains社で提供しているPHPer御用達のIDEですね。
ウィルゲートではPHPで開発されたサービスが多く、開発メンバーの1/3の方がPHPStormを使用しておりました。

メモ用エディタ:boostnote
Maisin&Co社が提供しているソフウェア
Google Driveなどと同期することができるので、複数デバイスでも利用することが可能です。


~本人コメント~

キーボードを新しくしたのはいいのですが、移行に苦労しています。。
慣れると早くなりそう!



メディアユニットマネージャーのFさん

使っているハードウェア(デスク周りの使用物)

デスク周りで使っているもの山善 デスクファン (風量2段階) ホワイト YDS-N12(W)
  

これから暑くなってくる季節で必要なアイテムですね。
ちなみに、温度と生産性は深く関係があるらしく、夏に作業する最適な温度は25℃といわれており、オフィスで一定の温度設定になっている場合、生産性向上のためにもこういったデスクファンも必要そうです。


使っているソフトウェア

開発エディタSublime Text 3
コミュニティによって作成されたクロスプラットフォームテキストエディタです。

DBクライアント:Navicat
PremiumSoft CyberTech Ltd.が提供するグラフィカルデータベース管理 / 開発ソフトウェア
ウィルゲートの開発チームでは約半数の人が使っているツールです。
以前は、無償版に制限されていましたが、近年では有償版も申請して導入できるようになりました。

ブラウザ拡張機能Google Arts & Culture
世界の名画をブラウザで鑑賞できる拡張ツールです。
開発ツールとしては直接関係ないのですが、とてもユニークなツールです。
こんな感じで新しいタブを開くと様々な世界の名画がブラウザで鑑賞できます。


f:id:fujita-takumi:20180629162639p:plain


~本人コメント~

Google Arts & Cultureは毎日の楽しみが増えてすごくオススメです。画面見せて説明しているときなどの会話のネタにもなります!



サグーワークス開発PLのIさん

使っているハードウェア(デスク周りの使用物)

会社で使っているもの:Nespresso

ネスプレッソ コーヒーメーカー イニッシア ルビーレッド C40RE

ネスプレッソ コーヒーメーカー イニッシア ルビーレッド C40RE

デスクを通り越し、会社共有で使えるエスプレッソマシンを置いていただいております!
ちょっとしたブレークタイムにはありがたいです!


使っているソフトウェア

メモ用エディタ:iA Writer
Information Architects Incorporatedによって開発されたiOS用のテキストエディタ

DBクライアントツール:DBeaver
ロシアのRider Soft LTD合同会社で提供されているフリーのデータベース管理ツールです。

ツール:GitKraken
GitHubが開発したElectronベースで作られたGitクライアントツールです。
ウィルゲートではCUIまたは、Sourcetreeをつかっている人がほとんどなので珍しいです。


~本人コメント~

git karakenは簡単なコンフリクトの解消が自動でできます。
最近増えたgloはtrelloのような看板機能で、タスク管理にも便利です。



サーバサイドから機械学習まで手がけるOさん

使っているソフトウェア

ブラウザ拡張機能:Vue.js devtools
Vue.jsの開発をサポートする Chromeブラウザの拡張機能です。
サグーワークスの開発ではVue.jsを用いているので、開発を効率よく行う上では必要な拡張機能です。

ツール:f.lux
時間帯に合わせて色温度の調整をして、目を保護してくれるフリーツール
1日中PCを見ているエンジニアには、体のケアのためにも必要なツールですね。


~本人コメント~

f.lux は最初オカルトの類だと思っていたのですが、今では無効化されていると画面が眩しくて辛くなるほどに依存してます。とてもオススメのツールですが、色に敏感な(デザインなどの)仕事するときに無効化するのを忘れずに!



サービスをまたいだフロントエンジニアのIさん

使っているハードウェア(デスク周りの使用物)

キーボード:REALFORCE91UBK-S
東プレ株式会社のキーボードです。
人差し指、中指でタイプするキーと小指、薬指でタイプするキーとで、タイプするときの負担が変わっており、疲れにくいタイプができるように設計されたキーボードです。
私も同じキーボードを使用しています!

f:id:fujita-takumi:20180702140941j:plain

使っているソフトウェア

ブラウザ拡張:Vimium
vimキーバインドGoogle Chromeを使えるようにできるプラグインです。
ページのスクロール、リンクのクリック、ページを戻る/進むなどがマウスを使わずに操作することができるので、使いこなすことができれば作業効率がアップしそうなツールです。

ツール:Franz
複数のチャットツールを一元管理して使えるツール。
基本的にはチャットツールは1つのツールのみ使用するのが望ましいと思います。
お客さん都合など場合によっては、チャットワークとSlackを使うということもあると思うので、そういった場合にはとても便利なツールです。


~本人コメント~

REALFORCEは、新卒のときに初任給で買いました。4年目経った今でも毎日使ってます。
コトコトとしたタイピング音がなんとも心地よいです!



最後に

ウィルゲートのエンジニア内では個人やチームによって様々な開発ツールを駆使して開発を行っています。 チームを兼任している人も多いため兼任している人を通してチーム間で優良なツールの共有も行っています。 チーム間で優良なツールを共有することで、ウィルゲート全体で効率のよい開発が出来ています。 また、ツールの共有だけでなく定期的に開催される勉強会やLT会などを通して、ノウハウの共有も行っています。 今後もエンジニア全体で知識やツールの共有をして、成長していきたいと思います。