インストールできます。罫線が文字化けすることがあります。コマンドによるコンソールでの樹形図表示、いかがでしたでしょうか。便利だなと思った方、ぜひ今日インストールして使ってみてくださいね。一度インストールしておけばずっと使えます。2018facebookこんにちは、シタテルの藤本です。SCS(Sitateru-Control-System)という生産管理システムのバックエンド(Rails)を担当しています。シタテルに入って小さい機能の追加、改修を行ってきたのですが最近要件定義からリリースまでが3ヶ月程度のプロジェクトが終了しました。そのプロジェクトに対して振り返りを行ってみたので内容について書いてみたいと思います。やり方シタテルの開発では2週間のタイムボックスで動いており、最終日にKPTにて振り返りを行っています。今回のプロジェクトの振り返りでは繰り返し性がないことからKPTの拡張版でやってみました。予定した時間が甘すぎた1時間は流石に少なすぎました、大幅にオーバーしてしまい倍の2時間かかってしまいました(参加した方には申し訳なかったです、かつ快く続行していただき、ありがとうございました!)単発での実施かつ対象とする期間が大きいので最初から時間を長めに取っておくべきでした各項目の意味がパッとわからないProblemとRiskってどう違うということが出たりしました、事前にちょっと時間をとり認識を合わせておいたほうがスムーズに入ることができたかなと思いました思い出す時間がなかったGood、Problem、Riskについて事前にちょっと考えておくとかのアナウンスをしていなかったので思い出す時間がちょっと少なすぎかなと思いましたまとめプロジェクトを振り返ることでよかったこと、問題となったことを再認識しその解決策まで出すことができたことはとてもよかったと思います。出してよかったで終わると何も変わっていかないので次やる時に今回上がったことを見直して実際の行動に移して、少しでも良いプロジェクトにしていきたいと思います。🚀はじめにシタテルでは、衣服生産をSCS、マーケティング・営業の部分をHubSpotを使って管理しています。HubSpotを導入する際に、Sansanの情報をHubSpotに同期したいという要望があったので、SansanのAPIとHubSpotのAPIを組み合わせて同期処理を実装しました。AWSLambdaを使って、定期的に同期処理を実行しています。HubSpot公式にもSansanとハブスポットの連携の仕方という記事も公開されていますので参考にしてみてください。8.10axiosmomentserverless余談ですが実装したときAWSLambdaにはRubyの選択肢がなかったのですが、今は使用できるみたいですね。普段はRubyを使うことが多いので、次にLambdaを使うときはRubyで実装してみたいです。});};詳しくはこのあたりを参考にしてください。本当は+09:00に設定したい。moment().format("YYYY-MM-DDTHH:mm:ss")+"Z"HubSpotにインポート取得したSansanデータをインポート。propertyは数が多いのでほとんど割愛して記載します。});}上の例はひとつひとつPOSTしていますが、こちらのAPI使えば1回のPOSTでまとめてCreateできます。APICloudWatchでスケジュールを設定serverless.ymlにスケジュールを設定します。-vまとめ今回はSansanとHubSpotのAPIを使って、Sansanの名刺情報をHubSpotのコンタクトにインポートする方法について書きました。2018facebookこんにちは!シタテル株式会社CTOの和泉です。2017(リンク先は昨年のレポートです)新旧大小さまざまな企業のCTOがずらり100人以上。前夜祭に始まり、AWSの最新技術や文化紹介、選ばれた15社の技術やマネジメント紹介(登壇しました)、先輩CTOとの公開メンタリング、ダンスパーティーまで盛りだくさん。「CTOがいなくなって8ヶ月がたった話」「CTOの休み方」など、CTOにまつわる、CTOならではの話題や悩み相談が随所で繰り広げられていました。事業を進めていくのは本当にエネルギーが必要で、でも皆さん熱量高く真摯に取り組んでおられて本当に刺激になりました。40名を超える方と名刺を交換して事業について意見交換させていただいて素晴らしい出会いがたくさんありました。本当にAWSの運営の方々のホスピタリティが半端ない!私も事前に伝えていた事業内容に対してこの人が最適だろうという方を紹介いただいて、有意義なディスカッションが出来ました。来年もできたら参加したい!頑張ろう!とめちゃくちゃテンションが上りました。Abrahallsitateruでサービス・プロダクトを担当している北爪です。インフラを見ることもあり、今日はShellでの環境変数の扱い方について書きます。プロジェクトごとに環境変数/クレデンシャルを管理する複数のプロジェクトに関わっているときに、プロジェクトごとの環境変数やAWSのkey/secretsなど環境変数に設定し管理する必要があることがあります。Shellを使って管理する一つの方法を記述します。~/.crds/プロジェクトごとにプロジェクトファイルを作ったディレクトリ以下に置きます。ディレクトリはinvisibleファイルにしておきます。TF_VAR_rds_password=XXXXX読み込みと切り替え設定した環境変数群を以下の方法でプロジェクトごとに読み込みます。リセットはされないので、別プロジェクトに変える際は、あらたにshellを立ち上げるようにします。.~/.crds/pj-1別のプロジェクトのクレデンシャルを読み込む複数のプロジェクトファイルを作ることで、クレデンシャルを別で読み込むことができます。bashrcやzshrcなどに、読み込みコマンドを記述しておけますまとめクレデンシャルファイルを特定のディレクトリに作り、基本コマンドで呼び出すだけです。一覧性も高く、管理しやすくなります。2018facebookこんにちは!シタテルでエンジニアをしている建山です。工場向けのマイオペというシステムの開発を行っています。マイオペでは、インフラとして本番、ステージング、開発、feature環境を用意して開発していますが、新機能をテストする環境としてfeature環境を使用しています。feature環境にnetlifyというサービスを使用しています。netlifyとはNetlifyは静的なサイトをすばやく提供できるWebサービスです。フロントエンドのビルド、デプロイ、ホスティングのすべてを行ってくれます。netlifyとなっています。netlifyが可能なのですが、マイオペでは、ビルドの際にjavaを使用していて、netlifyのビルドで対応されていないので、circleciでビルドを行ったあと、netlifyにデプロイすることにしました。S3でよくない?」っていうツッコミはあるとおもいますが、まずは使ってみたということでご容赦ください。事前にnetlifyにサイトを作成してください。cliをインストールします。netlify-cliでいれました。netlify-cliでインストールしてもいいと思います。次に、circleciのconfig.ymlでデプロイの設定をします。cliを使って、デプロイします。デプロイしたいディレクトリをいれてください。$NETLIFY_ACCESS_TOKENはcircleciの環境変数にセットしてお使い頂いたほうがいいかと思います。上の例だと、ブランチ名に"-netlify"が含まれているとnetlifyにデプロイされるようにしています。実際には、利用状況にあわせてカスタマイズしてください。"abcd-netlify"というブランチでgithubにpushすると、デプロイされます!今回は同じURLにデプロイしていますが、デプロイのたびに違うサイトURLを発行してデプロイもできるようです。netlifyの中で、ビルドもいろいろできるようになっているので、今回のように限定的な使い方ではなく、もっと活用できると思います。使ってみましたということで、またいい感じのCI/CDを実現できたら紹介します!詳しくは公式ドキュメントをご覧ください。2018facebookこんにちは、シタテルの鶴巻です。devops&インフラ担当です。最近、firebase/firebase-admin-goの実装で気になったところがあり、プルリクエストから経緯を知ることができました。GitHub上のソースコードで気になった箇所の経緯を追うことは今後もあると思うので、整理がてら方法を紹介します。対象のソースコードが追加されたプルリクエストで経緯が分かったfirebase-admin-sdk-goの実装で気になった箇所firebase-admin-sdk-goは、名前の通りFirebaseサービスをGolangから扱うためのSDKです。Authenticationを試してみた際に、弊社で使用しているRubyのSDKがなかったため、GolangのSDKの実装を少し読んでみました。そこで、Googleのサーバから公開鍵を取得するメソッドの中で排他制御が行われていることに着目しました。私はここで排他制御を実施している理由がわからなかったので、経緯を調べることにしました。該当ソースコードは以下です。GitHubの対象レポのプルリクエストをHash値で検索プルリクエストが見つかりましたー!🎉🎉🎉https://github.com/firebase/firebase-admin-go/pull/3実装の理由は?プルリクエストのコメントにありました複数のスレッドが共有している公開鍵のキャッシュを同時に更新するのを防ぐためにmutexを導入したみたいです。httpKeySource構造体に定義されており、さらにhttpKeySourceはClient構造体に定義されています。SDKを使う際に最初にClientの初期化を行いますが、初期化した同一のClientで公開鍵取得メソッドがconcurrencyに実行されても安全なように実装されているのかなと考察しました。firebase-admin-sdk-goはgit-flowfirebase-admin-sdk-goはgit-flowで開発されているようです。そのため、masterのソースコードのcommitのHash値がプルリクエストがマージされた時のHash値と同じで、プルリクエストが見つけやすかったです。おまけ(nodejsの実装)Node.jsのSDKの同じ箇所の実装についても少し覗いてみました。Node.jsを書いたことはありませんが、見る限り排他制御はしていないように見えます。Node.jsはシングルスレッド推奨だから排他制御しなくていいのか・・・など思い、言語の特性の違いが垣間見えて面白いですね。https://github.com/firebase/firebase-admin-node/blob/master/src/auth/token-verifier.ts#L260まとめオープンソース文化いいですね。今回の例だとfirebaseの中の人が書いたソースコードや、そのプルリクを見ることができています(もしかしたら中の人じゃないかもしれませんが)。エンジニアとしては当たり前な文化ですが、ブラックボックス化されている業界が多いなか改めて良い文化だと思いました。Auth導入してみたかったのですが残念です。2018facebookこんにちは!シタテル株式会社エンジニアのいしづかです。みなさんはコードを書く時、どんなエディタを使ってらっしゃるでしょうか。現在開発が続いているシタテルコントロールシステムのバックエンドはRailsで書かれています。開発メンバーはそれぞれ自分が合うエディタを使っています。Mine使っている人もいますし、Atomもいたような・・・。Codeを使っています。え?Vimであらずは人であらず?いや、まぁ、えへへ。コードを書いているとコード内検索をかけたくなります。その際にはnode_modules配下とかは最初から外しておきたいものです。Code限定ですが、除外設定でハマったので備忘録としてその内容を書こうと思います。Excludeにパスを登録すると、その配下はエクスプローラー上にすら表示されません。Codeからは完全に管理対象外となり、当然検索にも引っかからなくなります。Excludeにパスを登録すると、エクスプローラー上には表示されますが、検索に引っかからなくなります。Exclude」ということになります。Excludeに登録しているのはの4つです。増やしてもいいかなと思うんですが、必要最低限で運用しています。設定完了であるはずが、、、アレ、logの中身とか検索対象になってる。パターンの書き方が間違っているのか?設定する箇所が間違っているのか?アレコレ試した挙げ句、最終的にたどり着いたのはこのボタンがONになっていないだけでした。まとめ何かを検索したとき、ほしいものがほしい分だけパッと手に入るっていいですよね。検索範囲を適度なものに調整しておくのはコードを書くときのストレスを軽減してくれると思います。言うわたしが、この除外設定が効いていなかった数十分間はストレスフルな状態でした。他の開発メンバーがどんなチューニングを行っているかちょっと気になるところです。どんなプラグイン入れているかとか聞けたらレポートしたいと思います。2018facebookこんにちは!シタテル株式会社UI/UXデザイナーの堤です。先日ずっと気になっていた0円タクシーを利用したのでレポートします。なっており、2018年12月5日から31日までで都内の対象エリアでのみ運行されています。プロットされてる画面。