pixiv insideは移転しました! ≫ https://inside.pixiv.blog/

入社してからいろんなプロジェクトで鍛えられた話 2015

この記事は、ピクシブ株式会社 Advent Calendar 2015の12/8の記事です。

qiita.com


こんにちは、新卒エンジニアの@ikです。 今年の4月に入社して、気づけばさまざまなプロジェクトを渡り歩いて開発を行ってきました。今回は、その経験を通して学んだことについて語ります。(奇しくも去年度の新卒である@yudemanjyu先輩も、去年の ピクシブ株式会社 Advent Calendar で同じようにさまざまなプロジェクトを渡っての記事を書かれていましたので、リバイバル風です。) inside.pixiv.net

プロジェクト1: Androidアプリ開発

入社後の初仕事はpixivのAndroidアプリの開発でした。以前からAndroidアプリを個人的に作ったことはありましたが、かなり前の話で、最近の技術に疎かったり、基礎的な部分も忘れている部分も多く、先輩に助けてもらいながら、Androidアプリの機能追加やバグフィックスを行っていました。それから数週間後……

「アプリのプッシュ通知のサーバサイド実装をやってみないか?」

という話が来ました。 今にして思えば、この分岐点が様々なプロジェクトを渡る旅のスタートでした。

プロジェクト2: プッシュ通知送信のためのpixiv開発

プッシュ通知を改善するために、アプリと通信を行うpixivのサーバサイドのコードを触る事になりました。

とはいえ、androidアプリとwebサービスではそもそもの言語・開発手法など何もかもが異なります。アプリチームで私を担当してくださっていた先輩は、アプリがメインの人だったので、pixivのサーバサイドを開発している別の先輩に教えてもらう事になりました。 ほぼはじめて、PHPを書くことになったので、こちらもゼロベースで覚えていくこととなりました。

pixivは最初にサービスが開始されてから、すでに8年以上経っており、中核とも言えるコードはこれまでの知見による様々なコード規約があります。 もちろん、そういった規約についてはドキュメントにまとまっていますが、規約は言語やフレームワーク・プラグインの変更、サービスの更新にともなって変わっていきます。そのため、自分1人でドキュメントを読んでいるだけでは、漏れがあったり、新しい規約が増えていたりして、最新の規約に沿っていないことに気づかない時もあります。だからこそ、先輩にコードレビューで指摘をもらいますが、レビューをお願いした人以外にもその部分の実装に詳しい人にコードを確認・指摘をもらうことも多くありました。そうして、多くの人から指摘をもらい、pixivのコードについての理解を深めながら、実装を行ってきました。

気づけば書いているコード自体はPHPがメインになっていました。そうして開発を進めていく中、アプリチームから1人別のプロジェクトのヘルプで移ってほしいという話があり、私が行く事になりました。

プロジェクト3: 決済基盤システム

pixivには複数のサービスがあり、pixivプレミアムなど幾つかの箇所で決済を行う場面があります。そこで使用している決済システムのコードは、これまでプロジェクト毎に実装されていました。これを1つの決済基盤システムにまとめ、社内で横断的に使えるようにするというプロジェクトが行われており、私はそこで開発をする事になりました。私は主に開発された決済基盤システムを今の既存のサービスで利用できるように繋ぎ込む点を中心にすすめることになりました。

また、私がこのプロジェクトに配属された時にはまだ基盤システムの開発中だったので、開発のかたわら、繋ぎ込みの準備として、導入する予定のプロジェクトであるBOOTHで開発を行うことになりました。

プロジェクト4: BOOTH

BOOTHは、ピクシブが運営するショップ作成サービスです。 booth.pm

BOOTHはRailsで実装されており、私にとってはまた新しい言語・開発フローでの開発となりました。同じpixivのサービスといっても言語も違えば開発フローも異なっています。今回は、主にユーザーへのページ内通知機能を開発していましたが、開発環境も全く異なっているため、開発環境の構築だけでほぼ1日使ったり、機能的には動くが、Railsの機能を知らずに不必要に冗長なコードを書いてしまったりということもありました。

プロジェクト5: pixivプレミアム

プロジェクトで開発した決済基盤システムを利用する第一弾として、pixivプレミアムでの決済を新しい決済基盤システムに切り替える作業を行うため、再びpixiv本体の開発に戻りました。pixivの開発は以前のプッシュ通知の開発の際に行っているため、基本となる部分は把握していました。しかし、決済という特殊な部分を扱うコードはそれ自体も特殊な上に、他の機能以上に慎重に進めなければなりません。

1度関わったことのあるプロジェクトに戻ったと言っても、新しく覚えなければならないことは多くありました。過去に決済関係のコードを書いたことのある先輩にレビューやアドバイスを貰いながら、進めていきました。この決済基盤システムは初めての導入ということもあり、今回導入してから発覚した問題などもありました。ここまでの経験無しでは無事に完了させることはできなかったかもしれません。

プロジェクト6: BOOTH決済

pixivへの決済基盤システムの導入が無事終わりました。次は新しい決済基盤システムを導入するために、再びBOOTHのプロジェクトに戻ってきました。 BOOTH自体の開発経験はあり、決済基盤システムの導入も2回目だったので、前回ほど大変ではないかと思っていました。 しかし、前回は既存のコードと密接に関わってくる箇所は少なかったですが、今回は決済処理全体に影響するため、既存の決済コードを前回以上に深く知る必要がありました。 例えば、現在BOOTHで販売されている商品は、以下の様にさまざまな種類があります。

  • 自宅からの発送商品
  • 倉庫からの発送商品
  • ダウンロード商品
  • pixivFACTORYで作成したアイテムのオンデマンド販売商品

それぞれの商品ごとに決済後に必要な処理は異なります。 そのため、それぞれの処理が正しく決済後に行われているかということをテストする必要があり、そのためにはそれぞれの商品の購入後の処理について正しく理解していなければなりませんでした。

まとめ

「pixiv」としてよいサービスを提供するために開発を行うには、pixivが行っているサービスについて深く知っているものが1つでも多いことに越したことはありません。 しかし一口に「全てのサービスについて深く知る」といっても、開発言語だけで言っても、Java、PHP、Rubyなどと多岐に渡り、それぞれのプロジェクト毎に開発環境の整え方から、開発フロー、MTGの進め方など様々な点が違っています。その中で、様々なプロジェクトに対して横断的に関わることで、それぞれのプロジェクトで必要な異なる知識を得ることができました。決済システムでは異なる仕様のシステム間での連携が必要不可欠のため、それぞれのプロジェクトで得た知識を有効的に活用することができました。

今回、関わったプロジェクトでは、先輩に教わってばかりでした。しかし来年は2016新卒の後輩も入社して、私も先輩になります。だからこそ得た知見を今後の自分の開発に反映していくと同時に、後輩に知識を継承していくことで、得た知識を広げていきたいと思います。

おまけ

なお、

「BOOTHの決済導入終わったら、今やってる新規プロジェクト手伝いに入ってね」

とマネージャーからのお言葉を頂いており、また1つ私が関わるサービスは増えそうです。


明日は、プッシュ通知機能の時にお世話になった先輩の1人、@uchienneoさんです。