モンモンブログ

技術的な話など

「フリーランスエンジニアでプロジェクトを進めることについて考える会」イベント参加メモ

フリーランスエンジニアでプロジェクトを進めることについて考える会 - connpass

こちらのイベントに参加しました。会場は日本橋サイボウズさんのところ。 15分くらい遅刻しちゃったので最初の安藤さんの発表は途中からになります…m(_ _)m

フリーランサーのインバウンドマーケティング / 安藤真衣子さん

発表資料 フリーランサーのインバウンドマーケティング

どんな人?

遅刻して自己紹介聞き逃しましたがm(_ _)m、
クソアプリ Advent Calendar 2017 では「カタカタカタッターン」を可視化するクソアプリを作ったりしたそうです カタカタカタッターンを可視化した - Qiita

以下発表

フリーランスとして楽しくお仕事していくにはインバウンドマーケティングが大切。

ていっても大げさなことではなく、

  • 自分の好きなこと、得意なことをやって、
  • ブログとかで見て見てー!って発信してるだけでOK。

何らかのアウトプットをしていると意外とあっさり声をかけてもらえる。

声をかけられるフリーランスエンジニアになるには / 渡邊 達明さん

どんな人?

渡邊さん作の niconicocoa というサービスに質問や感想を投げると、発表中のスライドにニコニコ動画よろしくコメントが流れるというインタラクティブな発表でした。楽しい。

以下発表

たくさん声がかけられるようになると

  • 安定収入!
  • 仕事が選べる!

発注する側はどうやってエンジニアを探すか?

  1. 知り合い
  2. 知り合いの知り合い
  3. クラウドソーシング
  4. ググってみる

知り合いベース(1, 2)で受発注出来るとなにかとやりやすい。知り合い増やすの大事。

3, 4 の受注を増やすためにも
ポートフォリオを充実させよう!

  • 実績としてブログ等に掲載させてもらえる仕事を出来るだけ選ぶ。
    実績掲載できないなら割増するくらいの勢いで
  • 仕事じゃなくてもメディアに取り上げられるようなものを作るとマル
  • 技術スタックがはっきりわかるプロフィールにする
  • ブログで発信!
  • 「この技術ならこの人」ってなってると強い。本を執筆したりとか。

注意点

  • 過去の案件と似たようなものばいかりになりがち。新しい技術を積極的に使っていくのマスト

まとめ

  • 知り合いを増やすの大事
  • 強みを作っておくと話が早い
  • ポートフォリオやブログでアウトプット
  • スキルの切り売りにならないよう新しい技術もやっていく

石橋を叩いて渡るフリーランスのなり方 / 今佑介さん

どんな人?

以下発表

大学出てすぐとか、新卒1年目とかでいきなりフリーになるの大変。
バンジージャンプするまえにロープがあるかどうか確認しよう

段階踏んでフリーランス化していく

  1. 副業
    • 本業と掛け持ち。ちょっと大変だけど。
    • twitterとかで「副業募集」って発信してみる。反応がなかった場合精神的ダメージ受けるけど、そのくらいでへこたれるならフリーランスは向いてないかも…
  2. 元の会社と業務委託契約
    • 元の会社の仕事は週3くらいにしてもらって、週2で別の仕事
  3. 完全フリー

どうやって仕事とる?

  • 営業活動はしたことない。FBメッセとかで来る
  • 信頼ポイントを貯めよう

最近のフリーランス事情(発注側視点)

  • リードエンジニアの採用が難しくなってる
  • いいエンジニアはみんなフリーランスになってる。特に都内。

良いフリーランスエンジニアの見分け方

  • 本質的にやりたいことをヒアリングできる人
  • 工数が少なくなる案を提案できる人。
    工数積んで稼ぐより、良いものを作ろうという人
  • 知り合いの信頼できるエンジニアに相談しよう
  • 短期(1ヶ月とか)での契約を渋るエンジニアはあまりいいエンジニアではないかも?(仕事へしがみつきたさが出てる?)

その他

  • 準委任契約がいい。一括請負だと揉めやすい
  • 契約期間はまずは1ヶ月から。実際仕事してみるとダメなパティーンを回避

kintoneなどを活用することで正社員リソースを一切使わずにフリーランス協会のシステムを構築した話/ 西小倉宏信さん

発表資料 20180904_kintoneなどを活用することで正社員リソースを一切使わずにフリーランス協会のシステムを構築した話 - Google スライド

どんな人?

これまで

  • 大学卒業と共に起業
  • 外注するお金ないから内省で開発
  • クラウドソーシング始める。外注すると寝れる時間が増えることに気がつく
  • 案件を見積もって受注するのに苦戦 -> 時間課金にした

お仕事の進め方

  • 週次で原価をお客さんにシェア
  • 月次でその1.5倍を請求
  • 1週間毎にお客さんと一緒に振り返る

ってやり方で2年くらいやってるそう。そのために作ったサービスがこちら↓

時間管理ツールTimeCrowd

  • タスクごとにスタート・ストップ
  • 誰がどのタスクをどれくらいやってるか分かる

2017年から フリーランス協会 を開発

フリーランス協会で使ってる技術

  • kintone (database, 画像とか)
  • heroku(インフラ)
  • SendGrid(メール)
  • Google認証
  • stripe(課金)
  • ChatWork(チャット)
  • cloud 9(開発環境)

kintoneはいいぞ…!(よさをいっぱい語ってくれてたけどメモれず><

そんなわけで

素敵なイベントをありがとうございました!m(_ _)m

CentOS で man が見れない場合は man-pages パッケージを再インストール

環境こんな感じ。vagrantcentos/7 です。

% uname -a
Linux localhost.localdomain 3.10.0-693.11.6.el7.x86_64 #1 SMP Thu Jan 4 01:06:37 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
% cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

CentOS で man がなぜか見れない場合、

% man ls
No manual entry for ls

まずは man-pages パッケージがインストールされてるかチェックして、

% rpm -q man-pages
man-pages-3.53-5.el7.noarch

もしなければインストールで解決。

% sudo yum -y install man-pages

man-pages パッケージはインストールされてても、含まれてるべきファイルが存在しない場合があるっぽい。

% rpm -ql man-pages | grep -w ls
/usr/share/man/man1p/ls.1p.gz
% ls /usr/share/man/man1p/ls.1p.gz
ls: cannot access /usr/share/man/man1p/ls.1p.gz: No such file or directory

パッケージを再インストールしてやればOK。

% sudo yum reinstall -y man-pages

それでも man が見れないコマンドがあったら、

% man ionice
No manual entry for ionice

そのコマンドのパッケージを特定して

% rpm -qf $(which ionice)
util-linux-2.23.2-43.el7_4.2.x86_64

再インストールしたら見れるようになりました。

% sudo yum reinstall -y util-linux

ギークハウス四ツ谷について

この記事は ギークハウス新宿界隈 Advent Calendar 2017 の5日目の記事です。
前日の徳谷さんからバトンタッチ。

モンモンといいます。Webエンジニアです。ギークハウス四ツ谷に住んでます。
ギークハウス四ツ谷についてちゃんと紹介した記事がなかったような気がするので、どんなシェアハウスなのかさくっと紹介したいと思います。

ギークハウスとは?

pha(ファ)さんという、京大卒の日本一有名なニートの人が始めたエンジニア(とか)向けのシェアハウスです。phaさんに限らず誰でも作れるので、北海道から沖縄まで(ていうかフィリピンとかにも)、色んな人があちこちに作っててゆるく繋がったり繋がってなかったりします。

Wikipediaの説明がわかりやすいので引用します。

ギークハウスプロジェクト とは、エンジニアやクリエイターなどのためのシェアハウスを作るプロジェクトである。

phaを呼びかけ人として、趣味趣向の合うギークやプログラマー、インターネットを活用するクリエイター同士で共同生活をする目的で、2008年夏頃に南町田から開始。経済的にゆとりのある人や訪問者がお金を出し合うことで共有物を購入するなどしている。趣旨に賛同しさえすれば誰でもギークハウスの名前でシェアハウスを作ることができるため、運営者はそれぞれに異なる。

ギークハウス四ツ谷とは?

正式名称はギークハウス新宿四ツ谷といいます。略称は ぎーよん
ギークハウス新宿ギークハウス新宿2丁目と合わせて新宿界隈ギークハウス3兄弟のうちのひとつです。
いずれもときさばさんが管理人で、まとめて ときさば系ギークハウス なんて呼んだりもします。

ぎーよんはこの3つの中で最も新しく、2016/8/1 にオープン。1年4ヶ月が経ちました。僕はオープン直後から住んでる初期メンです。初期メンって自分で言うの恥ずかしい。

最寄りは四ツ谷駅と四谷三丁目駅。特に四ツ谷駅は便利。

設備

2階建ての1軒屋で7LDK。
7部屋のうち3部屋が住人部屋で、それぞれ2段ベッドが2台ずつ。ときさばさんの方針で個室はなく全てドミトリーです。
残りはゲスト部屋×2、もくもく部屋(作業部屋)、ときさば部屋となってます。

リビング兼ダイニングキッチンの設備はこんな感じ。

  • 60インチテレビ
  • Nasne3台体制で録画漏れなし
  • ゲーム機たくさん。ファミコン、スーファミ、ミニスーファミ、ニンテンドー64、Wii U、PS4、Xbox、セガサターンなど。住人の私物なので持ち主が出てったら遊べなくなりますが…。スマブラ大会やスプラトゥーン大会が不定期に開催されます。最近はパネポンがプチブーム。
  • けっこう広いキッチン。住人が持ち寄った調理器具が充実してる。コンロ3口、魚焼き、備え付けの食器洗浄乾燥機も。オーブンはなし
  • 業務用の冷蔵庫が2台。キッチンの後ろにバーカウンター的に配置されてます。10人も住んでるといつもいっぱい。
  • 業務用の冷凍庫が1台。来客には必ず冷蔵庫と間違われる。10人も住んでるといつもいっぱい。
  • ルンバ。最近動かしてないけど…。
  • マキタの掃除機。コードレスで超便利!
  • 最近 Amazon Echo Dot と Google Home Mini が導入されました
  • 6人がけのテーブル
  • でっかいソファ。寝心地最高だけどここで寝ちゃダメ
  • リビング中央にどーんと立ってる太い柱がジャマなのが玉に瑕…。

他には

  • 風呂とは別にシャワールーム
  • トイレは1階と2階に1つずつ
  • 洗濯機2台、乾燥機2台。乾燥機は100円入れると1時間動作。ベランダの物干しにも干せる。
  • もくもく部屋(作業部屋)で作業出来るのは2人くらい。普通のプリンタと3Dプリンタがある。3Dプリンタ、誰も使わなくてホコリ被ってるけど…。
  • ゲスト部屋もあり、知人が泊まったり内見者がついでに泊まってったり(有料)出来ます。

みたいな感じです。

住人

現在10人住んでます。ちょくちょく入れ替わりますが。

キャパ的には最大12人。ゲスト部屋を住人部屋に転用すれば16人とかいけるはずだけど、さすがに人口過密で大変そう。

年齢層は20代前半〜40くらい。ちょっと前まで19歳の少年もいました。

Web エンジニアが比較的多めです。特に Ruby on Rails エンジニアが多いです。
他にもエフェクター(ゲームのエフェクト作る人)、ゲームプログラマ、ニート、フリーター、大学生、プロゲーマー志望、などなどが住んでいます/いました。

女性も2人います。退去した人も含めれば歴代で3人。
ときさば系ギークハウス、なんやかやで女性も結構住んでます。

生活

・食事
食事は基本的に別々です。外食だったり自分で料理したりです。 生活時間がそれぞれ違うので、みんなで集まって晩ごはんってことはしないです。 たまに誰かが料理してみんなに振る舞ってくれたりします。感謝。

・家事
掃除やゴミ出しなどは気付いた人がやって FB メッセに報告するスタイル。 住人一人ひとりが自分のこと+30%くらいの家事をやるようにすると、共用部分のメンテもうまいこといくよねってポリシーでやってます。 一部の人に負担が集中しすぎると不満が溜まって爆発するのでみんな気をつけような!

・連絡
住人同士の連絡は Facebook Messenger のグループチャットでやってます。若者があまりリアクションくれないのは FB に馴染みがないからかなのかなんなのか。まあなんとか回ってます。

・荷物受け取り
誰かしら常に家にいるので、荷物受け取りの心配がないです。みんな Amazon やら ZOZOTOWN やら AliExpress やら利用しまくりなので1日5〜6回くらい届きます。

イベント

ギークハウス新宿と持ち回りで ゆるめし というイベントを(ほぼ)毎週金曜夜にやってます。ゆるく集まってメシ食べようよ、というイベントです。
知り合いのエンジニア、デザイナー、起業家なんかが集まって雑談したりテックトークしたりゲームしたりしてます。

クローズドなイベントですけど興味あればご連絡ください。 エンジニアやエンジニアワナビーさん歓迎。エンジニアトークしましょう。

写真

最後に生活感あふれる写真をどうぞ。

リビング f:id:ymdsmn:20171205130634j:plain キッチン f:id:ymdsmn:20171205130542j:plain 住人部屋 f:id:ymdsmn:20171205130641j:plain 洗濯機と乾燥機、左手奥にベランダ f:id:ymdsmn:20171205130649j:plain もくもく部屋 f:id:ymdsmn:20171205130722j:plain 誰も使わない3Dプリンタ。あっよく見たらゴキブリホイホイ仕掛けたままだ>< f:id:ymdsmn:20171205130716j:plain

さて

明日はギークハウス新宿住まいの Yoshinori Yamashita さんです。
ギークハウス新宿のサークラ事件の全貌が今、暴かれる…!?
追記:Yamashita さんの記事公開されました。タイトルとブログ名www
AIが止まらない! - 渋谷ではたらく社長を殴る

「ActionDispatch::Static がないよ」エラーは rails_12factor gem 入れて解決

環境

% sw_vers
ProductName:    Mac OS X
ProductVersion: 10.12.6
BuildVersion:   16G29
% ruby --version
ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin16]
% bundle exec rails --version
Rails 5.1.4

本題

production 環境で rails console や rails server がエラって起動しませんでした。

% RAILS_ENV=production be rails console
/Users/monmon/projects/hoehoe/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/stack.rb:106:in `assert_index': No such middleware to insert before: ActionDispatch::Static (RuntimeError)
        from /Users/monmon/projects/hoehoe/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/stack.rb:73:in `insert'
        from /Users/monmon/projects/hoehoe/vendor/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/configuration.rb:69:in `block in merge_into'
        from /Users/monmon/projects/hoehoe/vendor/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/configuration.rb:68:in `each'
        from /Users/monmon/projects/hoehoe/vendor/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/configuration.rb:68:in `merge_into'
(略)

No such middleware to insert before: ActionDispatch::Static と怒られます。ActionDispatch::Static って actionpack に含まれるミドルウェアみたいだけどなんでだろな。

ググってみたところ、GitHub Issue に解決法を見つけました。

No such middleware to insert before: ActionDispatch::Static · Issue #221 · AssetSync/asset_sync

rfroetscher さんのコメント。

Make sure you have gem 'rails_12factor', group: :production.
That solved the problem for me.

このコメント通りに rails_12factor を Gemfile に追加するだけで解決しました。

group :production do
  gem 'heroku-deflater'
  gem 'rails_12factor' # 追加
end

全然深掘りしてないですが、動いたのでよしとします٩( 'ω' )و

蛇足

ついでにもう1つ、同 Issue の別コメントに「heroku-deflater gem を Gemfile から削除すると直る」という情報もあり、僕の場合はこれでも確かに動いたのですが、 heroku-deflater は削除したくないので前述の方法で解決しましたとさ。

(ていうか多分この heroku-deflater がそもそもの原因な気がする…)

Rails5 の or クエリがバグを誘発しそうで超怖い

Rails5 になって ActiveRecordor クエリが導入されました。早速、既存のコードを書き換えようとしたんですが、かなり慎重に使わないと結合順序のワナに嵌ってバグりそうで怖いです。

このような(間の抜けた)コードがあったとします。

Country.
  where(id: 1).
  where("id = ? OR id = ?", 1, 2).
  pluck(:id)

生成される SQL はこうで、

SELECT "countries"."id" FROM "countries" WHERE
"countries"."id" = $1 AND (id = 1 OR id = 2)  [["id", 1]]

実行結果はこう。

[
    [0] 1
]

これを、or クエリを用いて素直に書き換えてみます。

Country.
  where(id: 1).
  where(id: 1).or(Country.where(id: 2)).
  pluck(:id)

生成される SQL はこうで、

SELECT "countries"."id" FROM "countries" WHERE
("countries"."id" = $1 AND "countries"."id" = $2 OR "countries"."id" = $3)  [["id", 1], ["id", 1], ["id", 2]]

実行結果はこう。て、さっきと違うやないかい!?

[
    [0] 1,
    [1] 2
]

最初のケースでは A AND (B OR C) のように OR 句のまわりが明示的にカッコで囲まれていたのに対し、 or クエリを使ったケースでは A AND B OR C とカッコがなく、結果的に (A AND B) OR C と評価されたためです。

最初のケースと同様の結果を得るには、or クエリを使った行を最初に持ってくるといいようです。

Country.
  where(id: 1).or(Country.where(id: 2)). # この行と
  where(id: 1).                          # この行を入れ替えた
  pluck(:id)

生成される SQL はこうなり、

SELECT "countries"."id" FROM "countries" WHERE
("countries"."id" = $1 OR "countries"."id" = $2) AND "countries"."id" = $3  [["id", 1], ["id", 2], ["id", 1]]

実行結果は最初と等しくなりました。

[
    [0] 1
]

(B OR C) AND A のように OR 句のまわりがカッコで囲まれて、最初のケースの A AND (B OR C) と等価になっています。

or クエリ、怖いですねえ。

この挙動をしっかり理解した上でコードを書いたとしても、チームの別のエンジニアが(あるいは将来の自分が)無自覚に where 句を追加したり順番を入れ替えたりして、予期せぬバグが生まれたりしたら…。

慎重に使ったほうがよさそうです。