taisablog

taisa's engineer blog

未分類

2016年の振り返り

投稿日:


2017年になってもう3ヶ月が過ぎようとしているけど、今年初投稿なので今更ながら2016年の振り返りをする。

2016年前半

2016年前半はWeb業界に来て初めてWebサービスの受託開発をした。5年前にSIerからWeb業界に来て以来初めての受託開発だった。プロジェクト前半は若手エンジニア2人いたが、色々な都合により後半は自分1人になりそこからは1人最後までやることになった。
SIerにいた頃、小さめのプロジェクトであれば自分一人でやることはあったが、今回のような大きめのプロジェクトで0→1のサービス開発をマネージメントしながら開発するというのは初めてだった。ローンチ後は何事もなく稼働しているのでよくやったと思えたもののWebサービスの受託開発の難しさを思い知った。

Laravelについて

開発はPHP+Laravelを使った。初めて使ったフレームワークだったが、日本語ドキュメントがしっかりしているのでほぼそれだけで開発を進めることができた。

主なプラグインは以下を使った。

  • laravel-debugbar
  • laravel-ide-helper
  • Intellij Laravel-Plugin

2016年後半

サービス開発に戻り、戻ってからは主に以下のことをやった。

  • 決済システム導入
  • CI環境の再整備
  • ステージング環境の整備と追加
  • PHPUnit+Phakeによるユニットテストの本格導入
  • サーバのオートスケール

決済システム導入

これは、受託開発が都合により伸びた為、設計までして他のメンバーに引き継ぐすることになってしまったが、その後、また引き継ぎ開発を進めていった。「決済」といったシステムを扱ったことで良い経験ができたように思う。

CI環境の再整備

サービスの拡大、人の入れ替わり、増加により以前自分で立てたJenkinsのCI環境が整備されずひどい状況になりつつあったので整備した。Jenkins2へのバージョンアップもこのタイミングで行った。

ステージング環境の整備と追加

人員に対してステージング環境があきらかに枯渇していたので再整備と追加をした。具体的にはシステムだけでなく運用者もリリース前テストで利用する為、ステージング環境利用待ちのようなものが発生している状況だった。また、いくつかのサービスがつながっていることもあり環境がブラックボックス化していたのを再構築しドキュメント化しつつ環境を増やした。テスト環境大事。

PHPUnit+Phakeによるユニットテストの本格導入

UnitTestも以前は書くよう推奨していたが形骸化している状況だった。また、新卒メンバーが入ってそもそもテストが書けないメンバーもいる状況だった。これに対して、ハンズオンを開催しある程度書けるところまで持っていき、それ以降はプロダクト開発時にフォローするという形で最終的にはメンバー全員が必ずUnitTestを書くというところまで持っていくことができた。また、テストが増える従って、修正時の確認コストが減り品質が上がってきている実感が得られた。

サーバのオートスケール

アクセスが増え、ときに突発的に高負荷が来るという事象が増えてきて、その度にサーバをたて、デプロイスクリプトに新しいサーバを追加しデプロイするということをやっていた。それもいい加減面倒だし事前アナウンスがなければ対応ができないので、常にS3に最新ソースを配置しておき、あとは負荷検知により自動的にサーバを増やすという仕組みを導入した。

社外活動とアウトプット

2015年末に子供が生まれたことと2016年の前半の受託開発に忙殺されたことで全くできなかった。2017年は落ち着いて来たこともあり活動を増やす予定。

まとめ

2016年後半の取り組みに関しては、2017年から始めるスクラムの取り組みの為の下準備という意味合いもあり、テストや環境系の整備をメインに行った。これにより2017年からの取り組みをスムーズに始められたと思う。

-未分類
-,

執筆者:

関連記事

no image

【15分でできる】EC2(Web+DB)ネットワーク構築 〜画面ポチポチ〜

最近EC2を使うケースは少ないですが、まずは基本としてオーソドックスなEC2+ネットワーク構築の流れをまとめました。 VPCを作成する IPv4 CIDERブロックを「10.0.0.0/16」にしてVPCを作成します。 DNSホスト名を利用するのでVPCのDNSホスト名をONにします。 パブリックサブネットを作成する 作成したVPCを選択し、IPv4 CIDERブロックを「10.0.1.0/24」にして作成します。 プライベートサブネットを作成する 作成したVPCを選択し、IPv4 CIDERブロックを「10.0.2.0/24」にして作成します。 インターネットゲートウェイを作成する 作成したインターネットゲートウェイをVPCにアタッチします。 VPCにパブリックルートテーブルを作成する 作成したVPCにパブリックルートテーブルを作成します。 作成したパブリックルートテーブルに「サブネットの関連付け」からパブリックサブネットを関連付けます。 パブリックサブネットに関連づけたルートテーブルのルートを編集し、送信先を「0.0.0.0/0」としターゲットにインターネットゲートウェイを設定します。 WebサーバーとしてEC2を作成する 作成した VPCを設定とパブリックサブネットを設定します。 IPはパブリックサブネット内の「10.0.1.10」を割り当てます。 「セキュリティグループ」をソース「カスタム」で「0.0.0.0/0」にして作成します。EC2インスタンスが作成できたらElasticIPを関連付けます。 鍵を取得してEC2にSSHアクセスする # 例 $ chmod 400 ~/.ssh/my-key.pem $ ssh -i ~/.ssh/my-key.pem ec2-user@ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com Nginxをインストールする # インストール $ sudo yum -y install nginx # サービス起動 $ sudo service nginx start # 自動起動ON $ sudo chkconfig nginx on セキュリティグループ(ファイアウォール)を設定する 「インバウンドルール」にHTTP(80ポート)で「0.0.0.0/0」を設定しWebからのアクセスを許可します。 「パブリック DNS」でブラウザからアクセスができることを確認します。 DBサーバーとしてEC2を作成する 作成したVPCとプライベートサブネットを設定します。パブリックIPは不要なので自動割り当てパブリックIPを無効化します。 内部IPをプライベートサブネット内の「10.0.2.10」に設定します。 プライベートサブネットからしかアクセスしないので「セキュリティグループ」をソースカスタムで「SSH」と「MySQL/Aurora」にパブリックサブネット「10.0.1.0/24」を指定します。 Webサーバーに秘密鍵(my-key.pem)を送り、WebサーバーからDBサーバーにアクセス可能にします。 # 秘密鍵をWebサーバーに送る $ scp -i ~/.ssh/my-key.pem ~/.ssh/my-key.pem ec2-user@ec2-18-178-132-45.ap-northeast-1.compute.amazonaws.com:~/.ssh/ # Webサーバーアクセス $ ssh -i ~/.ssh/my-key.pem ec2-user@ec2-18-178-132-45.ap-northeast-1.compute.amazonaws.com # 権限変更 $ chmod 400 ~/.ssh/my-key.pem # DBサーバーアクセス $ ssh -i ~/.ssh/my-key.pem ec2-user@10.0.2.10 パブリックゲートウェイにNATゲートウェイを作成する DBサーバーにMySQLをインストールするためにパブリックサブネットのNATゲートウェイを通してインターネットへ接続可能にします。 メインのルートテーブルに送信先「0.0.0.0/0」としてNATゲートウェイを設定します。 MySQLをインストールする # インストール …

2018年 半年の振り返り

2018年も半年を過ぎたので振り返る。 2018年の抱負 今年も去年と同様に2018年の抱負を書く。 2018年の抱負 去年と同様にいろんなことはできないので大目標3つ+サブ目標。これ以外にも細かいものはいくつかあるけど別途まとめる。 CTOとして 機械学習 英会話 サブ目標 引き続きフロントエンド CTOとして … 前置き 自分はあれもこれもできるタイプではないので、1年の抱負のような目標と中長期的な目標をたててそれをたまに見直しつつただこなすだけという方針にしている。やり方は結果的にこうなりたいというのをリスト化して、そこからドリルダウン式で必要なことそれを一つずつクリアしていく感じ。 2018までに立てていた中長期的な目標は、すべての項目をクリアできたので、年初にあらためて書き出してそれをまた同じように実行している。中長期的な目標と1年の目標があって、1年の目標は、主目票、サブ目標、個人活動、プライベートで分けて立てている。 CTOとしての活動 2018年1月からはスタートアップのCTOという立場で新しいスタートを切ることができた。 選択と集中 これは自分にとってもスタートアップにとっても非常に重要。やりたいことが沢山ある中で限られたリソースで如何にやるべきことをやるか。ただ今年の前半は、業務以外に書籍執筆、コミュニティ活動に結構時間を割いたので選択と集中はできなかった。前半で個人活動は一区切りついたので後半は少し抑えて選択と集中をすることにする。 開発速度と品質担保 開発速度と品質担保はフェーズによって全然やり方が違う。0→1のフェーズはとにかくアウトプットして結果を出す必要がある。今は1→10にするフェーズだと思っているのでどう進めるか色々考えた。 この段階を疎かにすると10→100にするフェーズで開発速度や品質に大きくしわ寄せがくるし、一方でやり過ぎると10→100の段階にたどり着けさえしなくなる。なのでバランスをとりながら開発速度と品質が担保できる方法を考えて進めた。どうしても大きく変えなければいけないところとかはあって、既存機能に影響を与えてしまったのは反省点。 チームビルディング チームビルディングもその時にあったやり方があると思う。去年1年間はスクラムを組んで良さを実感できたけど、今スクラムを組むのは違うと思ってやっていない。ただ、自分がだんだん何やってるのか分からなくなってきたので途中から1人スクラムをはじめた。そして最近、役割だけスクラムっぽい取り組みを入れた体制にした。 新規学習技術は機械学習 去年は、JavaScriptをメインにして活動してある一定の成果が出せたので、今年はかねてから考えていた機械学習をメインにした。そして「AIPyハンズオン勉強会」というのを開催してみんなで一気に学習することにした。 勉強会はこの半年で2回開催できた。これはほんとにやってよかった。次回は7/19に第3回を予定している。こういうのは継続が大事なので続けていきたい。 AIPy (アイパイ) ハンズオン #1 AIPy (アイパイ) ハンズオン #2 AIPy (アイパイ) ハンズオン #3 (7/19開催予定) 執筆 年末から書いていた本を無事出版することができた。書籍執筆はすごく面白いのでまた書きたい。 React、Angular、Vue.js、React Nativeを使って学ぶ はじめてのフロントエンド開発 コミュニティ活動 PyCon JP活動 今年もPyCon JPスタッフをやっているけど案の定あまり活動ができていない。それでも前半は時間を見つけて少しやったけどどうしても中途半端になるので後半の活動は抑え気味になると思う。 PyCon APACに参加する 去年に引き続き今年も参加してきた。海外カンファレンスはPyCon APACしか参加したことないけど本当に面白いので機会をつくって他も参加していきたい。今年はgihyoに参加レポート記事を寄稿した。こういったアウトプットができるのもよさの一つ。 Day1:プライバシーを機械学習でどう守るか?/機械学習の基礎と応用 英語でコミュニケーションができるように 去年PyCon APACに参加した時と比べると、少しDMM英会話をやったりテック系Podcastを聞いたりしたおかげか、普通に生活する分には英語に対する抵抗感は少し減った。トークについても去年よりは聞き取れた気はするけど、話す人によっては全然聞き取れなかったりするのでなんとも言えない。英語使う機会は今の所ないのでこれからはテック系Podcastを聞くくらいに抑える。テック系PodcastはFull transcriptがあるのでTalk Python To Meをよく聞いている。 ブログ継続 ひとつき2投稿目安だけど半年の時点で9投稿と少し少なめ。 サブ目標 サブ目標は今の所ほぼ未着手。JSの深掘りをする予定。 プライベート 草野球とソフトボールをやる 今年もThe Soulsという草野球チームで野球やってる。今季未だ負け無し。今年は草野球に加えてソフトボールもはじめた。 ハーフマラソンかフルマラソンに出る 4/14にハーフマラソンを走った。フルマラソンは経験あるけどハーフははじめて。数年前にフルマラソン走ったときよりもハーフのタイムは悪かったけどなんとか完走。秋に向けて少しずつ準備する。 株 楽天バンクと楽天証券を開設したけどそれ以上はまだ何もやっていない。ちなみに楽天証券はマイナンバーの提出が必要。 まとめ 前半のうちに個人活動はきりよくやることができたので後半は事業に注力する。あと今年は飲みに行きまくっていた。それはそれでいろんな業種の人と出会えるから楽しいけど後半は抑える。体調もたまに不安を覚えるので体調管理もちゃんとせねば。

Go言語 GORM+GinでTODOリストのAPIを作ってみた

前回の「Go言語 GORM+GinでTODOリストを作ってみた」に続いて「GORM+Gin」でTODOリストのAPIを作ってみました。ソースコードは前回からの差分だけを記載しています。できたものは下記URLから確認できます。 http://sandbox.taisablog.com/api/v1/ GinのGithub 事前情報 Webフレームワーク:Gin (https://github.com/gin-gonic/gin) ORM:GORM (https://gorm.io/docs) DB:MySQL ルーティングは今回はAPIなので以下としました。モデルをtasksにすればよかったと思いましたが一旦このままにしておきます。 [GIN-debug] GET /todo –> main.main.func1 (3 handlers) // 一覧表示 [GIN-debug] POST /todo –> main.main.func2 (3 handlers) // 新規作成 [GIN-debug] GET /todo/:id –> main.main.func3 (3 handlers) // 編集画面表示 [GIN-debug] PUT /todo/:id –> main.main.func4 (3 handlers) // 編集 [GIN-debug] DELETE /todo/:id –> main.main.func5 (3 handlers) // 削除 ディレクトリ構成 . ├── api │   └── v1 │   └── todo.go ├── controllers │   └── todo.go ├── db │   └── db.go ├── main.go ├── models │   └── todo.go ├── router    └── router.go router.go router.goにr.Group(“/api/v1”)のAPI用のグループを追加してルーティングを追加しました。 package router import ( “github.com/gin-contrib/cors” “github.com/gin-gonic/gin” “github.com/jinzhu/gorm” v1 “github.com/taisa831/sandbox-gin/api/v1” “github.com/taisa831/sandbox-gin/controllers” …

no image

2020年半年の振り返り

2020年も半年が過ぎたので年初に立てた抱負を簡単に振り返ってみます。 2020年の抱負 2020年の抱負 Golang(◯)業務でやれたのでVueJS(△)業務で少しやれたのでReact(✕)Pending(やりたいけど)TypeScript(△)読書会で少しずつ進めてるのでAWS(◯)業務でやれたのでPython (Flask)(◯)大分理解できたので執筆(◯)遅れつつも着実に進められているのでブログ継続(△)執筆に時間をさいているので少なめなので現時点でこの記事含めると8記事なので6記事Delay会社のDeveloperブログが立ち上げられたのでよかった 中長期的な話 楽しく仕事をする 良いプロダクト(◯)良いメンバー(◯)良い技術スタック(◯) これは今の所継続できていますが、年初に採用もやることになってエンジニア採用ができなかったのは反省点。これまでがっつりやることなかったので良い経験にはなりました。 生活面 腕立て・スクワット・プランク(◯)ランニング(✕)後半もリモートが続きそうなので厳しそう家で飲みすぎない(◯)家でタバコをなるべく吸わない(✕)後半もリモートが続きそうなので厳しそう 会社で週1で走ってましたが、フルリモートになったのでランニングはできなくなりタバコ(IQUOS)の量は増えました。筋トレはやり方を変えつつも継続できています。 まとめ Goを書きつつインフラ周りの作業をすることも多くなってきて、これまでやりたくてもできなかったところでもあるのでだいぶ楽しくなってきました。執筆もあと一息なのでなんとか予定通りに仕上げて年内には完成させたい。

no image

2017年の振り返り

2017年も残りわずかとなったので年を越してしまう前に振り返る。結論から言うと今年は近年稀に見るいい年になった。というのも今年立てた目標や中長期的に立てていた目標を達成することができたから。今年立てた目標はこちら。これらの内容について簡単に振り返る。 2017年の抱負 2017年になって1Qが終わろうとしているけど、年末に考えた2017年の抱負を書こうと思う。 2017年の抱負 いろんなことはできないので3つ+サブ目標で考えた。 生産性 ビックデータ ビジネス・インテリジェンス サブ目標 フロントエンド 英語 生産性 これまでも開発の生産性を意識した活動をしてきたが、全員の開発効率アップ、品質アップのような守備的な活動が多かった。けど今年はスクラム体制にして攻撃的な面も加えていきたいと思う。 去年までの振り返り 去年までは2人1組のような小さなチームで開発し、できたらリリースするというサイクルで開発していたが、以下の問題が細かく積み重なってきていた。(サービスの規模がそういった状況に陥る状況にまで成長したとも言える。) マネージャーの管理コストが高い 要件定義して開発に仕事を振る側の負担が大きい 開発者が指示待ちになる 開発した機能が属人的になる 開発メンバーが他のメンバーが何をしているか把握できない(チーム感がない) 開発・営業・運用で足並みを揃えるのが難しい これらの問題を一気に解決する為に2017年からはスクラム体制で開発を進めることした。 スクラムのチーム構成 最初のスクラムチームの構成は以下の7人体制 プロダクトオーナー スクラムマスター(自分) 開発チーム デザイナー兼コーダー 中堅エンジニア 2~3年目のベトナムメンバー(2人) 新卒エンジニア スクラムを始めるあたり読んだ資料と書籍 Wikipedia まず最初に見たのがWikipedia。スクラム自体はある程度決まった型があるので、ここを見るだけでも大体の流れを確認することができた。また、スクラムガイドがリンクされているので合わせて読んだ(こちらも17ページ程)。 SCRUM BOOT CAMP THE BOOK 次に読んだのがこちら この本はスクラムについての概要はわかったけど実際どんな風に進めたらよいかが分からないという方におすすめ。実際の流れを漫画を交えて説明してるので読みやすいし一連のスクラムの流れがわかる。個人的にはスクラムガイドとこの本を読めばスクラムを開始できると思う。 スクラム実践入門 他の書籍も一応見ておこうと思って呼んだのがこちら 生産性 今年の大きな目標の柱として、生産性というのをあげていた。これまでも意識していたことではあるが今年は具体的にスクラムという取り組みを取り入れて実践した。生産性を意識する背景は、主に人口減少・人手不足などがある。とにかく時間をかけて仕事すれば結果がついてくるという時代ではなくなっている今、あたらめて生産性を意識して仕事することにした。結果的にはスクラムマスターとして約1年間スクラム開発をし、一定の成果を出すことができたと思う。スクラムがどんなものか、スクラムを導入するとどんな結果が得られるかが把握できたのでこれからに生かせる経験をすることができた。 ビッグデータ ビッグデータに関する知見はほぼ皆無に等しかったが、今年はAWSを利用してビッグデータに関するサービスをやろうと考えていた。そんな折ちょうどその文脈で新規サービスを立ち上げることになり約5ヶ月位かけてスクラム体制で開発をした。ビッグデータに関しては、AWSサミットに参加したことでどのようなアーキテクチャにすればよいかが考えられたのが大きかった。具体的にはデータレイクという手法を取り入れた。サービスについてもスクラム体制がなんとか機能してスケジュールを大きくはずすことはなかった。実際ビッグデータに関してはデータがたくさんたまるというところまではいけなかったが、それでも1年前にはまったくなかった経験と知見を得ることができた。 ビジネス・インテリジェンス ビジネス・インテリジェンスに関しては、ビッグデータとほぼ同様の文脈なので特記することはないが、ただビッグデータを扱うだけでなくしっかり示唆を出せるものをつくることができた。ただ、機械学習やデータサイエンスといったことを取り入れるところまでは至らなかったのでこれらは来年の主軸の目標にする。 フロントエンド フロントエンドは、今年ようやく本格的にモダンな技術を取り入れることを決意してチーム一丸となって脱jQueryを果たした。業務外でVueJS、React、Angularの勉強会などを行い最終的にはVueJSを採用した。VueJSでやったことをすべてjQueryでやってたらめっちゃ大変な上にサービスの更新も大変だっただろうと思う。本当に導入できてよかった。 英語 英語までは絶対手が回らないだろうと思ってサブ目標にしていたが、案の定英語は他と比べると一番手をつけることができなかった。ただ、2017年の目標は以下の2つだったのでこれについてはしっかり達成することができた。そして2018年は2017年よりも時間を割いて、英語を少しでも楽に使えるようにしたいと考えている。 英語の勉強をするというよりは英語を使う環境に身をおける状態にする 英語の技術系podcastを聞く まとめ ここに書いていない中長期的に立てていた目標も今年で達成することができたので総じて2017年は良い年になった。無理に目標を立てすぎないというのがよかったのだと思う。自分の体調やキャパを考えるとできることはどうしても限られてしまうのでその中でできることを来年も考えてやっていこうと思う。