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

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

自分にとってRailsはプログラミングではないと思った人へのヒントとか

Ruby on Railsはプログラミングではない!Railsはプログラミングではない!の炎上を受けて補足を受けての内容です。

3年くらい前にSinatraでwebアプリケーション開発を学ぶという感じで、非エンジニアな人向けにプログラミングを教えてたので、そこを深掘りして・・と思ったら、佐藤さんが自分が言いたいコトをしかも相手にしっかり寄り添って書いていたので、これ以上書くことがない・・と思ったけど、それだと芸がないのでちょっと違った視点で書いてみようかと思います。

まず上記2つのエントリ以外も含めてチェックしてみました

たぶん自分は前職からのクセなんだけど、こういうホッテントリしてたブログとかSNS的な情報があった場合に、過去の情報を割りとくまなくチェックしてしまい、ちょっとしたネットストーカーみたいな感じですね^^;

で、一通り読んでいて、自分もサッカー好きなのでアラサーからメッシになる方法とは?が刺さる内容だったのですが、それ以上にTechacademyオリジナルサービス開発の案が出ないのでアドバイスもらった

人間は弱い。こうやって自己投資して、退路を断つことは多くの場合に有効である。

という一文がとても刺さりました。

こういう人にきっかけがあれば、色々教えて、自分の弟子になってもらいたいというちょっといやらしい考えがある年齢的に節目のタイミングで、その人にとってものすごい危機感を感じて、退路を断って思い切った行動をしてる人が割りと身近にいたり、自分も割りとそういう経験をしてるので、こういう感覚を持ってる人はすごく共感してしまいます。

勝手に共感を持ったので、ちょっとしたヒントをいくつか

何となく勝手に共感(というか親近感っていうのが適切かな?)を持ったので、最近のエントリ+過去書かれていたことでカベに行き当たってるようなので何かヒントになりそうなことを考えてみました。

オリジナルのサービスについての着想

この1か月でぼくはオンラインブートキャンプのほぼ全カリキュラムを終え、あとは最終課題「オリジナルサービスの開発」というところまできている。 しかし、ここにきて大きな壁にぶつかっている。 アイディアが出てこないのだ。 〜中略〜 メンター「新しいサービスを考えるときは、日常生活の中で不便に感じたことや、こんなのがあったらいいのにな、という部分に注目します。ヒントは普段の生活の中に隠されているんですよ」 Techacademyオリジナルサービス開発の案が出ないのでアドバイスもらった

メンターさんが提案されてるようなことがヒントにつながりそうですが、それよりも、ご自身が過去書いてるエントリが新しいサービス考えるきっかけになるのかなと。

言語化しづらい「楽しさ」

「楽しさ」を感じることができれば、人は報酬がなくても何時間でもやってられます。ですが、これに明確な目的や理由が加わってくると、さらにがんばれます。

ぼくら人間は、どんな事象にも理由を見つけたがる生き物です。理由がないと納得できないし、動けない。まあ「楽しいから」という理由は、理由であって理由でないような不思議な感情なので、説明が難しいのですが、、、

楽しいと思えれば、書かれてるように、何時間でもやっていられると思うけど、ここ↑で書かれてる「楽しいから」という理由は、理由であって理由でないような不思議な感情ってまさにそうかなと思いますね。

で、例えばなんですけど、Ruby/Railsをやってる人も、実はそれぞれそれの楽しさって違うのかなと思ってます。

Ruby/Railsの楽しさを書き込んでもらうようなサービスだと、初学者・初心者の人にとっては、自分にとっての身近な目標となるような人が見つかるかって学びが継続的なものになるのかなと。

※なんとなくだけど、Ruby/Rails好きな人って、こういう世話焼き的なことを割りと積極的にやってくれそうな人が一定数いそうだからなんとなく成り立つのかなと。

インターネットの仕組みを知るには?

上記のオリジナルのサービスとは別のカベについてちょっと感じたことがあったのでそっちにも触れてみます。

もちろん、ほかにもプログラミングを学ぶ動機はいくつかあります。 「ぬるぬる動くかっこいいウェブサイトが作りたい」とか「オリジナルのロゴとかアイコン作りたい」(これはデザインですが、、、)とかもあります。 ただ、やはりそういう見た目の部分よりも、最近はより深く、インターネットの構成要素、仕組み的な部分を知っていきたい。知って動かしたい、世界を作りたい。そういう欲が出てきてます。

ぼくにとってのプログラミングは「世界あるいはインターネット世界をより詳細に認識するためのアプローチ」です。

2000年頃にスゴイ人達が集っていた会社で、派遣社員として仕事をしてて、インターネットの基盤となるような技術要素(TCP/IPUnixC言語)について精通してるような人がたくさんいる環境というか空気の中で、技術系の仕事に関われたオッサンな自分としては、インターネット世界を詳細に認識するにはTCP/IPについて理解を・・と言いたくなるけど、低レイヤーな所ってとっつきづらいし、いきなりそこをやるのもちょっと時代背景的に違うかなと思っていたりします。

とはいえ、アプリケーション層に近い所よりは、もう少し下のレイヤーついて勉強してみることで、この人にとっての楽しさになるかもしれないし、そこを少しでも知れると

「あー、インターネットってこういうことなのか」

という気付きにもしかしたら成るのかなとなんとなく思いました。

折角Ruby/Railsやってるのなら、Pure Rubyなソフトウェアでインターネットの仕組みを学ぶ

rubydnsというRubyで書かれたDNS Serverとかあるみたいだし、大分古い記事だけどRuby-WEBrickでwebサーバとかあるので、Pure Rubyなソフトウェアでクローズドなネットワーク環境下で、インターネットの仕組みを学ぶことは出来そうかなと。

ただ情報が古いのが大半なのと前提としてDNS/Webの仕組みがわかってないと出来ないことなので、自分で書いといいて何だけど、これはちょっと無いかなぁ・・

結局Sinatraを使った何かを作る

それなりに情報源があって、かつ、学んだことがその後の学習につながりやすいという意味で、Sinatra使ったシンプルなWebサーバーを作ってみるのが良いのかなぁー

英語だけどWeb Fundamentals Tutorial - Rails Girlsというコンパクトにまとまった記事があるのでこれを参考にすると、Sinatra使って簡易なWebサーバーを実際に自分で作って動作確認みたいなことがきっと出来そうな気がします。

で、そこでHTTPまわりの基礎をなんとなく把握しつつ、RubyベースのWebアプリケーションでRackサーバーというのがあるのかということについて知れるきっかけになるかもしれないし、Webアプリケーションの構成要素を知れると、そこからRailsを見る目にちょっと変化が出るかなと思います。

最後に

最近(とおもったら約1年前でした)書いたWebエンジニア・デザイナーのためのパーソナルコーチ

  • 最初からどっちに進むのか決めなくても良い
  • パーソナルコーチのような立場で、相手の力量とか指向性とか考えて、相手に寄り添いながら教えるようなプログラミング講座ってたぶん無い気がしてる

という考えはあながち間違ってないのかなと、改めて感じました。

フリーランスになって1年3ヶ月経過したので振り返り

1年経過した振り返りからあっという間に3ヶ月経過してました。

上記エントリでここ最近やってることについて触れてましたが、1つ終了して、Rails4でスマフォアプリのバックエンドのWebAPIの開発の方が色々と頼まれる領域が増えたのでそちらを週3日行ってます。

残りの2日はというと別の所でこちらは完全に常駐してというスタイルで手伝っています。

ひたすら作る仕事と熟考してから作る仕事

少し前にこんな↓ことを書いた通り、縁あってWebメディア系での開発の仕事をしてます

ファッションxメディアのスマフォとWebアプリみたいな所で、バックエンド全般+管理画面のフロント全部という感じで開発 ECxメディアで割りと有名(少なくともうちの家族の中では)な会社さんで開発 ECxメディアの領域固有の技術要素を考えてみた

技術的には両方共にRailsを使っているのですが

  • 前者はこれまでにないようなことに事業にチャレンジしてる状況でそのための手段となるものが色々と必要なのでひたすら作ってる
  • 後者は熟考してから作ってる

という感じで脳みその使い方が全然違う感じがしてます。

変な例えですが、サッカーの代表選手が、所属クラブでのパフォーマンスをうまく発揮できないみたいな言われ方されるケースがあるんですが、異なるスタイル・戦い方を突然やれって言われてもすぐには出来ないみたいな状況と同じなのかなとなんとなく思ってます。※でもようやくこの状況に慣れてきた

良かったこと・反省点

ECxメディアさんの所の仕事は割りと早い段階で決めていたのは良かった反面、前回での反省点同様にやりたいことに着手できてない状況は変わってないですね・・

とはいえ、今やってる仕事で得てる知見は割りと自分がやりたいと思っていることと関連があるので、前回の反省点からは多少改善はされてるのかなと思ってます。

ここ最近着手してること

画像解析+機械学習みたいな領域のことをやっててるので

みたいな所にチャレンジしてます。

あとは、NAVER まとめの管理機能(こういう↓感じのやつ)と似たような感じの、自社サイトで扱う記事管理機能をRails+Angularで実装してます。

NAVERまとめ管理機能のキャプチャ

f:id:h5y1m141:20151030204229p:plain

実際にはNAVERまとめのこの項目よりも多い&複雑な仕様(例:記事中で任意の箇所でページ区切りができるようにしたいとか、タイトルは基本テキストだけど、任意で独自につくったタイトル画像も指定できる)だったのでModelの定義で色々悩んで作るの決行大変だった・・

ちなみに、作ってる中でRailsのFat Controller/Modelというのがどういうことなのかようやくわかってきて、色々と解決方法を探って最近ポチった Fearless Refactoring: Rails controllersは約$50でしたが、今の自分にとって求めてる情報が決行あったので、買って正解でした

次の3ヶ月に向けて

  • ここ3ヶ月で得た知見が結構あるから、もう少しQiitaに技術情報まとめたい
  • 中長期的なことを考えて、Web系にシフトしたい人(未経験な人も含む)の支援をしたいから、弟子になってもいいっていう人をどうにかして見つけたい

40歳を超えてエンジニアの仕事ができてるワケ

エンジニア35歳定年説からすると、現在42歳なのでその年齢は超えており、しかも前職は人材系の仕事をしていたので、エンジニアの仕事は8年ほどブランクがあるという状況の中でエンジニアな仕事で日々の売上を立てることが出来てます。

※といっても趣味&実益兼ねてここ数年はほぼ毎日コード書いてましたけどね^^;

なんでそんなことが出来るのかなとちょっと振り返ると1つのキーワードにいきつきそうなのでそこについて触れていこうと思います。

そのキーワードは抽象化するスキル

エンジニアとしての仕事をする上で色々なスキルが問われそうですが、個人的には抽象化のスキルが欠かせないかなと思っていたりします。

たまたま図書館で借りて読んだHarvard Business Reviewの2015年7月号でこんなことが書かれてました。

抽象化とは複雑な事象から類似を見つけること 〜中略〜 高次元で考えることによって、何が生まれるのでしょうか。

物事を抽象化してとらえ直すことです。それが人類にとって極めて重要なんです。 抽象化とは複雑な事象から類似を見つけるということです。類似を見つけるにはいい頃合いのレベルまで抽象化しなくちゃいけない。

この内容に関連するようなIT関連の記事が無いかなぁーと思ってちょっとググったらプログラミングの「抽象化」ってどういう意味で、なぜ必要なのかみたいな所で抽象化というキーワードが出てるので、抽象化が大事そうというのはあながち間違ってなさそうな気がします。

どうやって抽象化のスキルを身に着けたのか

エンジニア以外の仕事をここ数年はずっとやっていた状況の中で、結果的にですがどのようにして抽象化のスキルを身に着けたのかというと、インプットの量を増やす過程を通じて抽象化のスキルが身についたのかなと思ってます。

インプットのジャンルに偏りがなかったことで、物事を抽象化してとらえ直すという習慣が身についたような気がしますが、具体的にどういうインプットがあったのかちょっと振り返っていきます

前職でのキャリアカウンセリングの仕事

キャリアカウンセリングとは

キャリアカウンセリングとは、その個人にとって望ましい職業選択やキャリア開発を支援するプロセスのことです。 単に個人と職業のマッチングを考え、仕事を見つけるお手伝いをするだけではありません。人生で遭遇する様々な経験を積極的に受け止め、その人にとってより幸せな人生を描く成長の糧とするための支援です。

キャリアカウンセリングとは

ということらしいのですが、まぁ、確かにそうでしたね。

自分が心がけていたのも相手のおかれてる状況を踏まえて、その人が次の一歩を踏み出すお手伝いをするというスタンスで対応してました。

具体的には

  • その人が保有してるITスキルについて客観的に把握する
  • その人が抱えてる悩みとか課題を何故持つようになったのかその要因(例えばですがキャリアアップしたいっていう悩みにある根底がそもそも何なのか。)を話しの中から探る

という意識を持って少なくとも1500名くらいのキャリアカウンセリングをしてきました。

その経験を通じて、会社や立場や仕事内容が違っていても、同じような悩みとか課題を持つケースがあるのかなと考えるようになり、複雑な事象から類似を見つけるという抽象化そのものをずっとやっていた気がします。

そういう経験から似たような境遇の人同士が集まって互いに交流したほうが良さそうだし、そういう場をつくることで当時の本業にもプラスになることもあるかと思ってWeb系な人のキャリアカフェというトークイベントの企画運営に至ってたりします。

一時期本を読みまくった

インプットの量という意味ではこれも欠かせない要素かなと思ってます。

2005年に畑違いの人材系の仕事にシフトしたのですが、いろいろな人と接する上で、これまでと全く縁がない領域について知っておいたほうが良いと思って、1年に100冊本を読むというのを目標にしていました。

7月、8月に読んだ本を見ると、本当に色々なジャンルの本を読んでて最終的に目標は達成してるので我ながら良くやったなぁと思います

一見すると全然関連性がないような本同士でも、根底で通じるような概念みたいなものが見えてきてからは、本を読むペースが上がってきた気がしますが、これなんか、まさに物事を抽象化してとらえるということの一例かと思います。

最後に

自分としては30代で得たスキルとして抽象化というのがポイントになって40代の今を過ごしていますが、同世代の人が、30代をどう過ごして今に至ってるのかというのがちょっと聴いてみたくなり、今お手伝いをしてる仕事の区切りがつく頃合いを見計らって、以前やっていたようなトークイベントをやる上でのきっかけ作りにするためにちょっとまとめてみました。

仕事の区切りがつくかどうかはちょっと見えないけど、なるべく早い時期に実現したいと思ってます。

ECxメディアの領域固有の技術要素を考えてみた

今年も残り2ヶ月なので、今年のはじめからどんなことをしてきたのか何となく振り返りをしてたのですが、気づいたら今年の初めから、ECとかファッション色の強いメディアっぽい領域のサービスに関わるような仕事をずっとやってます。

今年のはじめに、ファッションxEC みたいな領域に特化したメディア色の強いアプリのバックエンド側の開発をして、その後にファッション要素の強いスマフォアプリのバックエンド側(主に管理機能)の開発のお手伝い。

そして現在は、以下2つをやってます

  • ファッションxメディアのスマフォとWebアプリみたいな所で、バックエンド全般+管理画面のフロント全部という感じで開発
  • ECxメディアで割りと有名(少なくともうちの家族の中では)な会社さんで開発

Webアプリの開発をする上で共通の技術要素というのはあるかと思うのですが、ECとかメディア系で固有の技術要素みたいなものが大きく3つあるのかなと実感してるので、少しまとめてみようと思います。

想定するWebメディアのイメージ

スタートアップな人達で何らかのメディア系のサービスをやろうとしてる場合とかを割りとイメージして書いてます。運用を長年してるような大手のサービスとかはそもそも内情知らないので、あまりそういうのはイメージしてないので、そういう前提で読んでもらえればと思ってます。

3つの技術要素

自分の中では

  • 画像処理
  • 日本語の解析
  • InstagramAPI

という3つが欠かせない技術要素かなと思ってます。特にここ2,3ヶ月は割とこの辺りの領域の技術検証含めて作業してる感じがしてるのでそれぞれもう少し掘り下げて書いてみます

画像処理

これはファッションxECみたいな所では絶対に欠かせない気がしてます。

箇条書きにするとこんな感じでしょうか。

  • 画像の収集のためのクローラーの開発
    • 最近気づいたのですが、ファッション系のECサイト向けのASPサービスがある。
    • それを使ってる場合だとスクレイピングする時に同じパターンで対応できて作業がだいぶ捗った
  • 収集した画像データーをサービスで扱いやすくするためのデーター構造の検討
    • 収集した画像に対するメタデーター(色とか在庫)をどう定義すると後で扱いやすくなるのかみたいな話
  • ストレージサービスの検討
    • AmazonS3が基本何だろうけど画像の転送に係る料金x予算考えると色々検討の余地がありそう
  • 画像解析
    • ImageMagickOpenCVとかを利用して画像内で利用されてる色数とか類似色の判定処理みたいな所。
    • どういうアプローチをとればいいのかここはまだ試行錯誤してる段階

日本語の解析

ファッション系の場合

  • 季節固有の単語
  • 最近のトレンドになってる単語

みたいな単語に対して、何らかの処理を行いたいケースというのが出てきます。

例えばですが毎年秋から冬にかけてスエードはおしゃれ女子の必須アイテムですが、今年も多くの海外セレブがスエードアイテムをコーデに取り入れていますみたいな文書があった場合に、

  • 管理画面上で上記文章を入力する
  • 上記の文章とは別に最近のトレンドになってる単語を別途登録(例:スエード)
  • 最終的に表示する文章では最近のトレンドになってる箇所に対して何らかの処理(例:その単語に関連する商品ページへのリンクを貼るなど)

というのが必要になってきます。

kuromoji.js使って構文解析したを見てたらkuromoji.jsも面白そうなのでちょっといじってみたいなぁと思いつつも、1,2年ほど前に趣味と実益兼ねて作ったアプリと連携するBotで使ったことがあるTinySegmenterを今回も採用してうまいこと処理が行えました。

どうでもいいけど最近の仕事を通じてガウチョパンツとかミモレ丈みたいな単語を見ても、「あ、あれねー」って理解できるし、「今なぜMA-1が??」という疑問を持ちつつもトレンドとなる単語が何かはだいたいイメージが付くようになりました。

InstagramAPI

記事中にこんな形で写真を引用するケースというのが割りとあるみたいで、こういうのをInstagramAPI通じてどうやって処理するのか最近色々調べてます。

f:id:h5y1m141:20151002192726p:plain

FacebookとかTwitterとかGoogleみたいなサービスのAPIの活用事例は割りと情報見かけるのですが、それらと比較するとInstagramAPIの活用事例ってそれほどないような印象をうけてます。

Instagramのusernameとuser_idの違いがわからずAPIドキュメントを見てて、投稿された写真データーを取得するのにだいぶハマりました・・

特定のユーザーが投稿した写真を取得する時にはuser_idの情報が必要になるが、このIDを知るために、まずは/v1/users/search?q=usernameを利用してuser_idを調べる必要があるので

https://api.instagram.com/v1/users/search?q=muji_global&access_token=取得したアクセストークン

というのをした上で

{
  "meta": {
    "code": 200
  },
  "data": {
    "username": "muji_global",
    "bio": "Share your MUJI Life with #muji \nMUJI official Instagram. 無印良品公式Instagramです。",
    "website": "http://muji.lu/1IuQyfp",
    "profile_picture": "https://igcdn-photos-b-a.akamaihd.net/hphotos-ak-xaf1/t51.2885-19/11379928_1598841523719305_1744704265_a.jpg",
    "full_name": "MUJI無印良品",
    "counts": {
      "media": 59,
      "followed_by": 56251,
      "follows": 9
    },
    "id": "1771059415"
  }
}

という処理で、username: muji_globalは user_idは1771059415であるのを確認した上で

https://api.instagram.com/v1/users/1771059415/media/recent?access_token=取得したアクセストークン

としないといけないんですよね・・・

それ以外にも、後々また自分で探しそうな情報はQiitaにまとめていたりします

娘の誕生日プレゼント

ブログに書いたつもりになっていたのですが、

昨年娘の誕生日プレゼントに、家具を作ってあげたので今年も、家具を作ってあげました

f:id:h5y1m141:20150925183028p:plain

f:id:h5y1m141:20150925183151p:plain

棚の横の部分は、もっと白っぽくなるようなのをイメージしてたのですが、ペンキの配合をちょっとミスってしまい、だいぶピンクっぽくなったけど、女の子が使うものだったらこの程度の色味の方が結果的に良かったのかなぁと。

材料費

近所の工務店さんの余った木材をベースに、杉板150mm幅のものだけ買い足して作ったので材料費は1500円ほど。

作業工数的な話

作業途中の写真を撮ればよかったと今更後悔してるのですが、側面につかってる杉板が全体的にささくれ立った状態だったので、ひたすら紙やすりをかけて表面を綺麗にしあげました。

シルバーウィーク期間の1,2日ほどはその作業をひたすらやっていて、普段使わない筋肉を酷使したせいか、だいぶ身体にガタが来ました^^;

ちなみに昨年はこんな感じ

昨年作った洋服をかける棚をイメージして作りました

途中の写真

横の板が大分大きく圧迫感あったので斜めにカット

f:id:h5y1m141:20150925182444j:plain

出来上がり

最終的にこんな感じに仕上げました

f:id:h5y1m141:20150925182453j:plain

こっちも近所の工務店さんで余った木材をベースにして作ってて、材料費はほぼ0円。

でも昨年も今年も作業工数がそれなりにかかってるので、自分の人件費を考えると、たぶん似たものを買ったほうが割に合うのかも

今後

普段作業する机の足元に自作した棚を置いててそこに技術書を置いてるけど、手に取りづらいから、縦長の棚を作ろうかなーと何となく妄想中

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とかを読む上で苦手意識が大分減った

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

フリーランスになって意識してきた仕事獲得術

ちょっと釣りっぽいタイトルですがここ1年ほど、自分なりにやってみたフリーランスの案件獲得術みたいなところを振りかえります。

利用する手段

フリーランス向けの案件に限定しないかもしれませんが以下3つに大別できそうな気がします。

  • 個人的な人脈
  • 人材系のエージェント会社みたいな所
  • Web系の媒体

実際この1年の間でこの3つ全てを利用して案件獲得してきたのでそれぞれについて掘り下げてみます

個人的な人脈

会社を退職して年休消化中に書いたエントリ

  • 知り合いのオフィスに訪問
  • 個人事業主の開業届けを出す
  • 元々水面下で決めていたJavaScriptiPhoneアプリ開発をマスターしよう!の講座以外に、以前からの知り合いから、思いがけない提案をいただき、8月から自分のこれまでの経験がフルに活かせそうな講座+αな仕事の打ち合わせ

ということを書いていたように、最初の仕事は結果的に全部、自分の人脈での仕事でした。

その後も、会社員時代にトークイベントで何度か利用させてもらっていたコワーキングスペースCo-Edo経由で、お仕事を紹介してもらったり、少し前に常駐していた所の人のつながりで、現在の仕事を紹介してもらったり・・という感じで人脈経由でのお仕事紹介が結果的には多くなってます。

間に人・会社が入らず直接やりとりするので、売上の観点でもですが、相手の信頼をどうにかして得るようにそれぞれの仕事をこなすことで中長期的なお付き合いになるかと思うので、そういう部分は良い点。

一方で、中長期的なこととか考えると、どうしても義理人情みたいなことが頭をよぎるので、単価の面であまりドライな対応をやりづらい側面もあるかなと思ってます。

人材系のエージェント会社みたいな所

これはフリーランスになる少し前から面識があったシェアゼロさんの中川さんが行ってるPROsheetさんと、もう1つ登録はしてあります。

元々自分はそっち側の仕事をしていたから

  • 世の中のWeb系のエンジニア向けの仕事の相場観
  • 人材系のサービスを行う上での案件獲得〜その後のフォローみたいな所にかかる工数 とか、その対価としての仲介料的なものの相場観

とかはそれなりに持ってます。

一般的に、こういう仲介する会社の仲介料的なものをすごく持っていかれるイメージがありそうですが、そういう仲介をする会社は、実際のお客さんとなる会社との取引を安定して行うための営業活動をしてます。 状況によっては、お客さんの多少の無理難題を引き受けて、営業工数とか考えると、全然割にあわないことも結構あったりするのかなと想像すると、それぞれの会社の仲介料は割りと妥当な金額になってるのかなと思ってます。

個人が持つ人脈には限界があるので、1,2つは登録はしておいても損はないかと思います。

ただし、ずっとそういう会社経由での紹介に頼ってしまうと、自分のお財布のヒモを握られてしまう感じもするので、その点は意識しておいてもいいのかと思ってます。

Web系の媒体

自分は、Wantedlyをちょいちょいチェックしてるのですが、業務委託契約とかの求人もそれなりに出てます。

Wantedlyの特性もあると思うのですが、気軽に会えるような雰囲気があるので、まずは、応募して話だけでも聞いてみたいということが出きるのがとても良いかなと思ってます。

  • 実際に会って互いの相性みたいなものを感じた上で、実際の仕事につながりそうかの条件の話が出来る
  • 互いの利害が一致しそうと思えるような求人なら、例え正社員前提の案件であったとしても話を聞きに行きたいボタンをポチって実際に会えた&仕事獲得出来た

ということを経験してるのでWantedlyは自分にはフィットしてます。

あえて欠点みたいなことを書くと、プロフィールを充実させておかないといけない点かと思います。

プロフィールに書ける実績を積んでおかないとそもそも書くことがないわけだし、プロフィール入力は割りと手間がかかるのでそういう時間をしっかり作らないといけないのは人によっては向かないケースもあるかなと思います。

売上単価みたいな話

流石に具体的な金額は書けないですが、売上単価みたいな話についてちょっと触れておこうと思います。

損して得を取れみたいな所が、特に人脈経由の場合に大きく出てしまう傾向があったのと、フリーになって初めの頃は、自分の実績という部分であまり自信がもてない面があったので、単価設定がだいぶ低めでした。

でも自分のアウトプットに対して、正当な対価というのを意識して、請求するような意識をしっかり持ってないとダメかなというのを昨年末にちょっと気づかされたのと、やっぱり自分のパフォーマンスに対する対価という考えでいけば、安い金額というのは、自分がその程度の仕事しか出来ないと認めることにつながりそうなので、単価設定というのは過度に安いのは辞めようと決心しました。

単価を上げすぎてしまうと、相手の期待値も上がってしまうので、相手にとってお得感を演出しつつ、自分としてもそこそこ満足の行く生活を送れるラインでの条件設定(金額x労働条件)を現在模索中してます^^;

相手を見極める能力は要らない

少し前にトークイベントで登壇してもらった堤さんに、「相手を見極めるようなことってどんなことされてますか?」ってたしか質問したことがあります。堤さん曰く、その案件の話を持ってきた当事者を見抜くのは難しいけど、その案件に関わる人にどんな人がいて、どれだけの人が巻き込めているのかを大事にしてるというようなことを言っていたように記憶してます。

最近はそれをすごく実感してて、結局のところ、人が巻き込めているというのは、その人自身が色々な人から信頼されてる証拠だし、信頼は、長い期間をかけて得られるものだから、そういうものを持ってる人の仕事というのは、悪くはないと思ってます。

今後について

個人的な考えですが、なるべく人脈を通じた案件獲得を伸ばしていきたいと思ってます。

残りがダメとかということはないのですが、

  • やはり間に会社が入ればその分だけ自分の売上が減る
  • (中川さんの所を除くと)人材系のサービスは今の所長い付き合いを互いにしてないので双方にとってのメリットが見出しづらい(つまりはその場限りの関係性になる可能性が高い)

というのがその理由かと。

これまででお仕事などを通じて縁が出来た人からの紹介を大事にして、そういう人が困っていそうなこと(主に人材獲得みたいな話)で自分が何か役に立てそうなことがないか常に考えて行動しておくことで中長期的な関係に持っていければというのが今後の狙いです。