40歳からのキャリアチェンジ

20代はエンジニア・PM、30代はWeb系エンジニア向けのキャリアアドバイザー。40代の今はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連あたり

Railsのスキルの世界観

ここ1年ほど色々な現場のお仕事をさせてもらったおかげで、Railsについてのスキルレベルの指標が見えてきた気がします。

Railsを使いこなせると自信を持っていえるほどのレベルにはまだまだ達してないですが、Railsのスキルについての世界観についてちょっとまとめてみようと思います

前提としての自分のWebベースのシステム開発で問われそうなスキル

以下でまとめますが、Rails/Rubyというのは、フリーランスになってから初めてだったりします。

ただ、技術の技術(ネットワークのTCP/IPとか)はまぁそれなりに頑張っていたから、その知識とか経験(BtoBとはいえあの規模のインフラ環境の経験はほんと貴重だった)は今でも十分活用出来てるかと思ってます。

インフラに関する領域

  • WindowsのActiveDirecotryという企業向けのものだけどそっちの経験がベースである
    • クライアント数が数万台あるような環境で端末の構成・維持管理を数名のチームでやっていた
    • 独自に内製化したツール+αで、ネットワーク対応がお世辞にも良いとはいえないWindowsを相手に頑張っていた。
      • 単純比較にならないけどMac+Boxenの環境っぽいのを自分たちで作り上げていた
    • ADのサーバーを見るチームも別にいるし、ネットワーク担当も、LAN(っていっても/24のセグメントがいくつもある)とWANとでチームが作れる程度の規模

開発に関連する領域

  • プログラミング
    • 前述した端末の構成・維持管理でWindows上でWSH/VBScriptベースで色々作っていた。
    • 前職はエンジニアじゃなかったけど、自分の業務効率化のためにWindows+WSH+JScriptという制約のある中で頑張って色々つくっていた。
      • 仕事柄データ集計とかをやる頻度が多かったのでミックさんの達人に学ぶ SQL徹底指南書とかを読んでSQLを割りと書くことはあった。
      • 趣味でスマフォアプリ+WebアプリをJavaScriptな技術(Titanium+Node.js+α)で全部作っていた
      • Rubyは趣味ベースでSinatraベースものを割りと書いていた

マインド的な所

  • インフラ寄りの経験が多い
  • エンジニアの仕事をする前後では元々サービス業の経験が多かった

というのが下地にあるからか、既存のシステムの改修とか保守みたいなみんなが好まないような仕事はそんなに嫌ではないです。

あと、前職で色々な経験・立場の人との対話をだいぶしたおかげで、モノゴトを抽象化して、互いの共通言語となるものを見つけるのは苦ではなくって、その辺りの特徴を活かしてお仕事をいただくように心がけてます

1年ほど前に見ていた世界観

上記触れたように、Railsは仕事で書いたことがありませんでした。

SinatraベースでWebアプリ書いていて、Scaffoldで雛形となるものを作ってみたいなことはかろうじて出来たにせよ

  • (当時は)メジャーなgemってよく知らなかった
  • 1対多な関係の構造をRailsでどのようにして扱っていいのかイマイチわかってなかった
  • Ruby自体もそんなに書けているわけではなかったので配列とかハッシュ操作とか全然スマートではなかった

という感じだった気がしてます。

ちなみにその状態でやった最初の仕事

我ながらよく頑張ったと思うけどこんなのを最初の半年ほどやってました。

  • Rails4の仕事
    • フロント側はAngularJSを使い始めていた
    • RackサーバーにPumaが利用されていた
  • 自分が入った段階ですでに担当者はx代目
    • 引き継ぎとかそういうのはない
    • 運用に関するドキュメントも基本無し。

その後に見えてきた世界観

上記経験した後ですが、色々縁があっていくつかの現場を経験したことで当初見えていた世界とまた違う世界が見えてきました

この時に自分なりに出来た(わかった)と思えたこととして

  • 開発するシステムは異なれど、Railsの開発でみんながよく使うgemがあることに気づく
  • Railsのレールにうまくのった開発をしていると、推測がきくから開発が楽になる反面、そこから外れると、凄く大変っていうのがよくわかってきた

という部分かなと思ってます。

一方でGitを単純に作業記録の延長線でつかっていたから、GitHubの有り難みがよくわからなかったというのが正直な所です

今年の春先頃に見えた次の世界観

よく使うgemがどんなものかわかってきたことで

  • xxxは以前つかったことあるからそれ使った機能ならだいたいxx日程度で実装できそう
  • 独自実装してるこの箇所は以前経験したxxxみたいなアプローチでいけそうというカンが効く
  • 今取り掛かりつつあるこの実装はなんとなく気持ち悪いからリファクタリングが必要かもというのが自然に湧くようになった
  • RSpecをどこまで書く・書かないという自分なりの判断基準がちょっと出来つつあった
  • GitHubの便利さを実感した
    • 基本リモートでプログラミングを教える仕事をしていたのですが、GitHubがあったおかげでそれが出来たのかな

という感覚をもてるようになりまいた。

それもこれも年始からGW頃までお世話になった受託開発+自社サービスをやってる会社さんの経験かなと思ってます。

次のステップに向けて自分が感じてる課題

ここまで長々と書いてきたのは、今後に向けて自分の課題というのがよくわかっていててめえらのRailsはオブジェクト指向じゃねえ!まずはCallbackクラス、Validatorクラスを活用しろ!みたいな話がまさに課題として出てて、ちょっと気分転換(というか現実逃避^^;)したくなったからだったりします。

負債の話はよく出ると思うのですが、今自分がやってる仕事に関して言うと、自社サービスの開発のお手伝いをしてて、

最近悶々としてることとか考えてることをいくつか書き出しておくと

  • 構造上、どうしてもネストが深くなるオブジェクトをどう扱うか?
  • 複数のContollerやModelで共通利用するような所はうまくConcernsを利用できるようになってきたけど、別のやり方があったのかもしれない
  • ずっと探していてようやく見つけたメタプログラミングRubyで書かれてる内容が肌感覚でわかってきたf:id:h5y1m141:20150821144627j:plain
    • そのおかげかわからないけど、他人が書いたgemとかを読む上で苦手意識が大分減った

という感じです。今見てる世界観が、数ヶ月後(もしかしたら数年後とかかも・・・)に変わっていたらまた頑張ってまとめようと思います