私のRailsを利用したWEB開発について
昨年まで開発のメインフレームワークとして利用していたRuby On Railsについて、どのような案件の開発してきたか紹介します。
[ 目次 ]
はじめに
こんにちは、香港に住んでいるWEBデベロッパーのなかむ(@nakanakamu0828)です。
現在は、受託、業務委託を中心としてリモートで開発を行なっています。
前回は私が今年から注力しているLaravelの案件について、どのような開発をしているか一部紹介しました。
今回は昨年までメインで利用していたフレームワークとなるRuby On Railsについて過去の案件を振り返ってみたいと思います。
【副業・業務委託】プログラミングスクールのRails講師(2014/10月〜2015/4月)
ランサーズを利用して獲得した初めての副業案件です。
この頃はRailsを独学で勉強していた時期で、チュートリアルでは物足りなくなり、個人開発をしていました。
Railsの復習にもなるので講師をやってみようと活動をはじめました。
プログラミング教室では、既にRailsチュートリアルをベースにした教材ができており、その内容を理解して生徒をサポートしていく形です。
主に以下のような教育を行っていました。
□ 教室としてやること
-
最終ゴールを一緒に設定し、ゴールに向けてスケジューリングを行う
→ 基本はコースによって期間が決まっている為、その期間内にできるゴールを設定する -
学習は教材に沿って進めてもらいます。だいたい週1くらいで対面 or Skype通話でミーティングを行い、教材とは別の課題を生徒に与え次回のミーティングで確認します。
-
教材の不明点やエラーハンドリングは随時Skypeで受け付けます。
□ 個人でやっていたこと(他の講師との差別化として)
-
Railsの情報をキャッチアップして、Evernoteなどにまとめ共有
-
実際の業務開発での視点を共有
→ 例えば、大規模案件での、DBの負荷分散やスケールアウトの話など教材を終えた後のエンジニアとしての延長線上の話をする -
Railsのスクールではありますが、ゴールに対しての別のアクションを一緒に考える
→ 例えば、単純にブログをしたいだけならWordpressなどPHPの技術の方が構築しやすいです。必ずRailsでないといけないというような教育は好ましくない為
このような内容を講師として半年くらい行っていました。生徒さんも10名弱くらいは担当させて頂きました。
そんな講師を辞めた理由は以下です。
-
私個人のRails力が高まり、開発案件に注力したいという気持ちの方が強くなった為
→ 教えるより自分が学んでいくことに注力したい。新しい技術や個人では学びにくい業務レベルの技術をさらに伸ばしたいという思いが勝ってしまいました。 -
プログラミング教室の教材内容に対して金額が高すぎると感じた為
→ 私の時間は取られるものの、教材の内容が初歩なので生徒がつまずいてることをすぐ解決できました。大したこと教えてないのに生徒さんは数十万円払っていると思ってしまったわけです。正直もっと安く教えることができると思いました。これは現在メンターをやっているきっかけにもなります。
【副業・業務委託】フリマサイトの管理機能開発(2014/11月〜12月)
ランサーズを利用して獲得した副業案件です。
仕事としてRails開発をしたいと言う想いから提案し開発することになりました。
期間は2ヶ月弱と短かったのですが、正社員が数名でエンジニア社長が自分でサービス開発を行うスタートアップ企業の中でRailsの技術を磨かせてもらいました。
以下のような技術を利用して開発を行っています。
- JavaScript / CoffeeScript
- Ruby
- Ruby on Rails
- MySQL
- GitHub
- Hubot
- HipChat
- AWS(インフラ)
私は、開発が追いついていなかった管理機能を中心に開発を担当しました。
zendesk apiを利用した顧客データの連携であったり、マスターデータの管理。運用サポート時に利用する機能開発などです。
得たことは?
-
Railsの業務開発ノウハウ
→ 自分が担当する箇所以外もソースを確認し、全体を把握するように務めました。盗める技術は全て盗むことが成長への第一歩と考えました。 -
どのようなgemを利用するべきか?
→ 知らないgemもたくさんありました。知らないものググり、次の案件で使えるように準備ができました。 -
git flowによる開発
→ 今まではSVNか自社で立てたGitでバージョン管理を行っていた為、PRを作成したりはじめてのことが多かったです。githubによるgit flow開発を学ぶことができました。
【業務委託】教育関連 マッチングサービス開発(2015/6月〜2017/3月)
この頃から個人でどんどん仕事をとっていきたいと思っていました。
そこで、知人経由で営業してもらい獲得した案件です。
java + springで開発されたマッチングサービスがすでに運用されていたのですが、javaエンジニアがいなく運用開発がうまくいっていない状況でした。
私はjavaの開発もできるのですが、社長が元エンジニアでRailsの経験があるということでRailsでリプレイスすることになりました。
業務委託で2年弱携わりましたが、主に以下のような開発を行ってきました。
- javaで開発された案件のRailsへのリプレイス
- 有料プランの導入。spikeを利用したカード決済プランを導入
→ 営業やマネタイズがうまくいかず途中で方向転換することになりました - iOS, Androidアプリ開発。バックエンドのAPIをRailsで開発
この案件は以下のような技術を利用して開発を行っています。
- JavaScript / CoffeeScript
- Ruby
- Ruby on Rails4
- MySQL
- Bitbucket
- Slack
- AWS(インフラ)
大変だったことは?
社長が元エンジニアなので、仕様調整が順調に進むと思いきや真逆でした・・・
過去にエンジニア経験があったことで「私がやっていた時はこうだった」とか「こうできると思う」というような過去の記憶、技術をベースに「あーしたい、こーしたい」と仕様を変更され調整が大変でした。
しかし、最終的には私の能力を評価して頂き、仕様含め開発全般を任せてもらえるようになりました。
現在のサービス状況は?
他の案件を優先する為、私は離れることになりましたが、現在も他の開発者を雇い運用を続けているようです。
【受託】Instagram Likeツールアプリ開発(2016/9月〜2017/3月)
この案件は、Like Potion というinstagramのLikeツールアプリをカスタマイズして日本版を出したいと相談があったことから始まりました。
他の案件もあったので、初めてネイティブアプリ部分の開発を外部に委託しました。
私は元々スマホゲーム会社にいたのですが、その時の同期でネイティブアプリ開発が得意なフリーランスエンジニアにフロントエンドの開発をお願いすることにしました。
私は、お客さんとの要件定義とバックエンドのAPI開発、ネイティブアプリのサポート開発(ノウハウをゲットする為)を担当し、2人で開発を進めました。
この案件は以下のような技術を利用して開発を行っています。
- iOS/Swift
- JavaScript / CoffeeScript
- Ruby
- Ruby on Rails5
- MySQL
- Bitbucket
- Slack
- AWS(インフラ)
元々 iOS, Android両方開発を行う予定でしたが、iOS版の開発が一通り終わり納品した段階で中止となりました。
お客さんの注力する事業が他に移った為です。
特に中小企業だと市場の状況やニーズによって方向転換が多いですよね。お客さん都合なので仕方なくプロジェクトは中止しました。
(開発したところまでの費用は再度見積もり直し、支払ってもらっています)
得たことは?
一番は、初めて外注を雇うという経験です。
元同期ですし、とても優秀ですし、納得した金額を支払ってあげたいという思いから時給はけして安くありません。
給与や報酬をもらうことが多かったので、報酬を支払う大変さを痛感しつつとても貴重な経験となりました。
【受託】Instagram マーケティングツール開発(2017/5月〜2018/2月)
この案件はinstagramのフォロワー管理やハッシュタグを管理して、企業のマーケティングに利用できるツールを開発していきたいという案件です。依頼してきた企業は、元々twitterで同じようなマーケティングツールを開発していてintagram版を作りたいと思っての依頼でした。
この案件は以下のような技術を利用して開発を行っています。
- JavaScript / CoffeeScript
- Ruby
- Ruby on Rails5
- Bootstrap3
- MySQL
- Bitbucket
- Slack
- AWS(インフラ)
大変だったことは?
元々instagramのAPIは承認制で審査が厳しいことで有名でした。
そして、ちょうど本案件の開発中に規約が変わり、パーミションが Basic のものしか利用できないようになってしまいました。
※ Basicは、OAuth連携したユーザーの情報しか取れず、他人の投稿情報やハッシュタグに関連する投稿などは取れません
元々想定はしていましたが、この規約変更でAPIは利用できなくなりました。
そこでintagramのデータ取得はスクレイピングするように変更しました。
得たことは?
前述した通りスクレイピングでデータ取得を行いました。
instagramはReactでHTMLをレンダリングをしています。なので単純にhtmlからデータを取得することはできません。
そのようなスクレイピングの複雑さは私の能力を向上させてくれました。
【受託】求人サイト開発(2017/3月〜2018/3)
知り合いのエンジニア社長のところでエンジニアの求職サイトを作りたいと言われたことがきっかけで開発することになりました。フリーランス、SESの求人マッチングがメインになりますが、全雇用形態を網羅した形で構築を進めていました。
一般的な求人サイトと同じですが、以下のような仕様で進めていました。
【求職者】
- マイページを作成し、ドキュメントやエントリーを管理
- 求職者は資料をアップロードしてドキュメント管理が可能(履歴書、職務経歴書、スキルシートなどをアップロードし管理)
- 求人検索から気に入った求人にエントリーが可能
- お気に入りの求人を保存
- 応募した企業とメッセージが可能
【企業側】
- 企業ページの作成
- 求人の作成
- 応募者とのメッセージが可能
- 求人の内容に合ったユーザーをスカウト可能
また、以下の技術を利用して開発を行っています。
- JavaScript / CoffeeScript
- Ruby
- Ruby on Rails5
- Bootstrap3
- MySQL
- Bitbucket
- Slack
- AWS(インフラ)
大変だったことは?
限られた金額と作業時間の中で、仕様の検討からマークアップ、開発まですべて1人で行なっていました。
運用フェーズの相談をする人やデザインの相談をする人がおらず孤独に進めるのが大変でした。
結局、サイトの営業や運営担当にリソースが当てられないということで、一通りの開発完了後ストップすることになりました。
最後に
このようにまとめてみるとローンチまで至っていない案件は残念です。
最初の2つの案件以降は、リードエンジニア or 1人で全て行う形で開発をしてきました。
本音を言うとある程度ユーザーがいるようなサービスにして、システムをスケールさせる技術を学んでいきたかったです。。。
私は、個人 or 少人数開発で 大規模なサービスを作ることが目標の1つとしてあります。
引き続きその実現に向けて行動していきたいと思います。