見出し画像

Rails未経験からAPI開発ができるようになるまで

Atrae Advent Calendar 2019 14日目を担当する新卒1年目の土屋です。
普段は、ビジネス版マッチングアプリ yenta でサーバサイドエンジニアとしてRailsで開発をしています。

5日目の記事 に続き、二度目の投稿になります。
今回は、Rails未経験から8ヶ月間で、モバイルアプリのAPI開発をできるようになるまでのざっくりとした過程と参考記事等を書きます。

tips風のQiita記事を書こうと思っていましたが、書いているうちに振り返りブログ風になっていったので、noteに投稿することにしました()

Rails Tutorial に苦しむ期

4/1にアトラエに入社し、その日からyentaのサーバサイドをやることになり、早速かの有名な Rails Turtorial を始めました。
「2週間で終わらせたらすごい、1週間なら伝説かも」 という先輩からの暖かい煽りを受け、
「伝説になる!」と息巻いて猛烈に進めていきました。

結果として、8日間で終わらせることができました。

終わらせる
= 8章あたりから、教材を写経してるはずなのに謎のエラーが出て動かなくなり、テスト(Rspec)についてはずっとモヤモヤしつつ、11章あたりからいよいよほぼ理解もできなくなったが、意地で最後まで読み続け理解した気になった。

・・・

ということで、
Rails初学者に Rails Tutorial は絶対におすすめしません笑
そもそもTutorial中で採用されている TDD(テスト駆動開発) という開発手法は、初学者にはハードルが高すぎます。。(RailsとRspecをある程度理解した人にとっては、内容も濃く素晴らしい教材だと思います。)
Tutorial という名前に騙されず、まずはProgateやドットインストール、Udemyなどの初学者向けのオンライン教材から始めることをおすすめします。

それでも難しかったりモチベーションが続かない大学生は、 GeekSalon に行ってみてください。(突然の古巣の宣伝です)


管理画面の改修でWebアプリとは何ぞやを知る期

その後、なんでもいいから少しでも役に立つことをやりたい!と思った僕は、社内用の管理画面をぽちぽち改修し始めます。
その過程で、RailsTutorialで学んだ()、MVCの考え方であったりCRUDであったりが実際のWebアプリでどう動いているのか
データベースの構造やそこからどうデータを取得して表示しているのか などのWebアプリの基本を実感できました。
完璧には理解はできていなくてもオンライン教材で一通りを学んだ後は、
既にユーザーがいて稼働している(≒実際のデータが一定以上ある)サービスを触りながら学ぶことが1番の早道なのではと思います。

以下は、その際に参考にした書籍、サイトになります。

・Webアプリの全体像と勉強すべきキーワードを見つけられる良記事
RubyとRailsの学習ガイド2019年版
・開発する際に傍らに置いて辞書的に使った本
Ruby on Rails 5アプリケーションプログラミング
・辞書的なサイト
Ruby on Rails ガイド

APIを"返す"とは何ぞやを知る期

その次に、めちゃめちゃ簡単なAPIをiOS/Androidアプリに返すという実装をしました。
そもそも、APIとは何者で、そのAPIによってモバイルアプリとの通信はどう実現されていて、APIを"返す"ってRailsでどうやるの?
みたいなところを、キーワードごとにググって調べつつ、
実際のRailsアプリのソースコードを読みながら推測して、勉強していきました。

要は、普段のcontrollerで、

def index
 @users = User.all
end

などと、書くところを、

def index
 personal = {'name' => 'Tsuchiya', 'old' => 24}
 render json: personal
end

のように、render json:  と書くだけなんだ
など、少しづつAPI開発とはなんなのかの解像度を上げていきました。


以下は、参考になりそうなサイトです。
Web APIとは何なのか
Railsで超簡単API
Rails 初めてのAPI作成

大きめの機能のAPIを任される期

その後、こんな機能を作りました↓
yentaを利用している友人・知人にメッセージを送れるようになりました!

yenta(Tinderのビジネス版のようなアプリ)に登録している、
Facebookの友達を表示・検索できる機能のAPI開発をまるっと開発しました。

その際に、学んだことは主に以下です。

- 新機能を作るということ
企画を固める→デザイン, 仕様受け取り→アプリ開発側とendpointのfix→API実装→仕様再確認(差し戻し)→DB再設計, スキーマ変更→API実装~修正, リファクタ→バグ直し..etc
- APIの作り方(endpoint, swaggerドキュメント, service層, jsonで返すということetc..)
- 新機能追加に伴うテーブル設計と、辻褄合わせのバッチ処理, リレーションなど
- FacebookAPIとの付き合い方(エラーハンドル, class分けなど)
- 検索機能の実装の難しさとパフォーマンス意識(クエリ重すぎて本番DB落ちた時の恐怖)
- 一覧表示のレスポンスのパフォーマンス
- 個人情報などを扱うレピュテーションリスクの重大さ, 実装することの責任の実感
- 大きめのアップデートリリースまでの流れ

API側の実装が概ね完了する→stagingにマージする→stagingアプリでテストする(deploygate)→本番アプリで簡易動作テストする(テストフライト)→本番DBにデータ入れる→本番アプリ&DBでテストする→みんなに使ってもらってテストする(テストフライトで配布))

業務のガチ振り返りで書いたものから一部抜粋してきたので、
急に飛躍した感が否めないですが、ざっくりこんな感じです。

ここまで来ると、この本/記事を読めばわかるとかではなく、
実際の現場で、デザイナー、アプリエンジニア、企画者などとコミュニケーションを取りながら、
右往左往しながら1つの機能を作り上げていくという体験をしないと中々得られないものなのかなと思います。
ただ、プロダクト開発が本当の意味で楽しく感じられたのも、この「大きめの機能のAPIを任される期」です。

そのため、"友達機能" と呼んでいるこの機能が、どれだけ使われたかやどんな不具合が出たなどは当然気になりますし、
この機能は、処女作として一生忘れることはないと思います。

これから

ここまでの色んな期を経て、いまはどんな期かと言うと、

処女作の反省を活かして、より良く速くAPI開発をする期
→ 今も、ある機能のAPIをまるっと開発しており、先輩にフィードバックをたくさん頂きながら、友達機能よりも速く効率良くより良いコードで実装できるように格闘しております。

ささっと作ったMVPをプロダクトとして成立させる期
→ ロジック自体は1日で作ったある機能がありまして、今はそれを1つのプロダクトとして成立させるには?と検証・改善をしております。


です。詳細は控えますが、これらもまた然るべき時に振り返りを書けたらと思います。


・・・

未経験の新卒1年目にこんなに良い機会が多くあり、
毎日フィードバックをしてくれる先輩もいる、
という今の環境に感謝をしながら、これからも精進していきたいです。

明日は同期でAndroidエンジニアの夢積です。よろしく!


この記事が気に入ったらサポートをしてみませんか?