絶品ゆどうふのタレ

ふと気づいたことを綴るだけのメモ

転職して3ヶ月が経ちました。

正確には3ヶ月と半月ですね。 今年の2月末をもって株式会社メルカリを退職し、3月から株式会社ナレッジワークで働いています。

メルカリでの思い出は社内のwikiとslackに置いてきたので退職ブログで書くことがなくて放置していましたが、新しい会社で試用期間も過ぎた(たぶん)ので、ちょっと近況を書いておこうと思います。

メルカリについて

多くを書く気はないのですが、自分はプレイヤーとしてもマネージャーとしても激動の中で色んな経験をさせてもらい、学ぶことの多い場所でした。 またMerciBox制度の補助のおかげで不妊治療を続けられて子供を授かることができたので、本当に感謝しています。

人生の辛い部分をガッツリ支えてくれる、そういう制度がある/どんどん改善されるのは本当に「いい会社だな」と感じる効果あるな〜と身を持って感じました。みなさんマジ福利厚生を厚くしたほうがいいですよ。

個人的には、辞めてなおいい会社だと感じますし、十分にこれからも人におすすめできるし、強く成長していくんだろうなと感じています。

ナレッジワークについて

kwork.studio

株式会社ナレッジワークは、昨年4月に創業したばかりのスタートアップ企業です。 現在プロダクトはまだステルスでやっているため、詳細については多くを語れません。 すごくざっくりいうと人の業務体験を変える、ワークエクスペリエンスを高めていくようなことを目指しています。

現在そこで自分はインフラ/SREのソフトウェアエンジニアとして働いています。

今まで自分はキャリアを特定分野に制限せずに、 インフラからWeb Frontend / iOSまで色々やってきましたが、ここ3年はEngineering Managerとして現場を離れていました。 そのため、改めてプレイヤーをやる選択をする際に今までのキャリアで最も強い専門性だったインフラのエンジニアとしてやらせてもらっています。

久々の現場で学ぶフェーズも多くて迷惑もかけていますが、積んできた経験をいろんな形で使いまわして頑張っています。

会社の中の様子

正直言うと、自画自賛みたいなセクションです、ここは。

ナレッジワークに入って一番に驚いたことが、1年未満のスタートアップとは思えない整備された組織体制です。。。!

明確なビジョンと精度の高い計画、ホワイトに働ける整った会社制度と評価制度、デザイン・ビジネス・技術のバランスを取って高いレベルでプロダクト議論とループが回せるチームメンバー、これまでの経験で見知った10名弱のスタートアップやチームとは一線を画すハイレベルな世界がありました。

一方でスタートアップ特有の勢いがないのかというとそういうわけではなく、メンバー全員の納得のもとで毎日ハイペースで仕様が決まり、驚異的なペースで開発が進んでいます。

わりと会社や中の人達の性質的に、きちんと上段の目線から物事を整えて決めていくのがが好き&力もある人が多いようで、様々な物事が筋が通った形で整っています。

個人的には、スタートアップに行くからにはダーティで整っていない会社を形作っていくフェーズもあるかな〜それもそれで楽しいかな〜、なんて思っていたらしっかりしすぎていて、逆に入ってビビってしまいましたw

メンバー募集の話

上に書いたようにとても整った会社ですが、今は社員が10名を超えたところでまだまだ小さい組織です。 ナレッジワークはステルスでやっている性質上、これまで採用は社員リファラルやダイレクトコンタクトなどに限定されていました。

ですが、ここから正式リリースに向けてもう一段ギアを上げていくためエンジニアを募集することになり、応募も窓口を開くことになりました。

kwork.studio

なので!やっと!エンジニア絶賛募集中です!!!!!!みんなきてね!!!!!

上記ページの採用デックもここに貼っておきます。

弊社のCTOもシェアしてたんですが、

early stageにしては・・・などと言ってますが、報酬も普通にしっかりしてると思います。

全然プロダクトの話が書けていないのですが、なんとなく興味が湧いた・ちょっと話を聞いてみたっくなったなんて人はぜひ、こちらのフォームに入れてみるでも自分のTwittterSNSで声かけてみるでも、何でもお待ちしていますのでよろしくおねがいします!!!

Karabiner-ElementsでESCやCtrl+[キー押下時に日本語入力を解除できるようになっていた

タイトルで全て言った。

普段からメモにMacVimを常用してるのだけど、Karabiner-Elementsになってから日本語モードからの切替時に いちいち日本語IMEを自分で解除しないといけなくて、手間だった。

が、気づいたらこれをさっと実現するCustom設定が使えるようになってた。。。!

実は結構前からっぽい。 すごく幸せになれる設定だったので、早速入れてみた。

設定方法

Karabiner-Elementsの[Preference]->[Complex Modifications]

f:id:Yudoufu:20180114214204p:plain

下部の[Add rule] -> [Import more rules from the Internet(open a web browser)]

f:id:Yudoufu:20180114214226p:plain

これで、 Karabiner-Elementsの追加ルール群のページ が開くので、

f:id:Yudoufu:20180114214252p:plain

そこで [International (Language Specific)] -> [For Japanese (日本環境けの設定) (rev 3)] を import する

f:id:Yudoufu:20180114214304p:plain

f:id:Yudoufu:20180114214358p:plain

再びKarabiner-Elementsの[Add rule] 画面を開き、

  • escキーを押したときに、英数キーも送信する(vim用)
  • Ctrl+[を押したときに、英数キーも送信する(vim用) (rev 2)

の2つを Enable にする。

f:id:Yudoufu:20180114214415p:plain

これで、vim上で挿入モードを抜ける際に日本語入力を解除できるようになる。

快適で涙が出るっす。

補足と参考

この設定は別にvim専用の設定にはなっていないので、当然他のアプリ上でもESC叩くと英数キーが送信される。

個人的には困らないからいいかなーと思ってるけど、もし対象のAppを絞りたい場合には以下のように 自分で complex modificationの設定を書いて追加することが可能ぽい。

docker & Kubernetes on Mac の環境構築 at 2018初頭

ここしばらくインフラ方面の知識updateがなく、久々にdocker周りから復習するかーと思い立ってみました。

が、進化の速さとか大人の都合とかによって1~2年のうちに状況が2転3転していたようで様々な情報が入り乱れていて、入門するにしても「で、どれを信じればええねん」という感じに。

というわけで自分なりに状況を調べて、「少なくとも2018年1月現在において、こうセットアップしてくのが便利かつ標準そう」というのを手順とともにまとめました。

目指す環境

  • Mac上でdocker、およびKubernetesのローカル環境を構築する

リモートのdocker / Kubernetes はcliの docker / kubectl を使えばいいので、ひとまずこれだけ。

先にまとめ

先にまとめると、以下をやっとけば良い。

% brew tap caskroom/versions
% brew cask install docker-edge
% open /Applications/Docker.app
    -> Preference -> [Enable Kubernetes]

もう少し状況説明

  • Dockerについて

    • 現時点では Docker for Mac を利用するのが便利かつ標準
    • homebrewの場合は homebrew-caskのdocker を使うのが正解
      • homebrew本家が持ってるdocker fomulaは古いので使わない
  • Kubernetesについて

    • Docker for Mac の Edge版から入ってくるKubernetesを使うのが良さそう
      • 多分まだ世の中は minikube が標準
      • Docker for MacのKubernetesサポートによって変化が始まってて、どちらが標準をとるかはまだ不明
      • でも手軽さ分こっちかなーって思うので採用した
    • caskのversionsに docker-edge があるので、当面はこれが楽
      • brew にkubectlがあるが、Docker for Mac がまとめて入れてくれるのでそれは不要

 ちなみにKubernetesのInstall

これをチェック入れて、進めると

f:id:Yudoufu:20180113002647p:plain

これで完了。

f:id:Yudoufu:20180113002730p:plain

最後に

Kubernetesとかkubectlの発音って、DockerCon の動画見てると キューバネティス キューブコントロール って呼んでて、僕も今度からそう呼ぼうって思いましたまる

iOSDC Japan 2016 に参加してきた

https://iosdc.jp/2016/

iOSDC Japana 2016、まるっと一日参加してきました。 すごくたくさんの人と熱気で、トークも面白いものがぎっしり詰まっていてとても充実したイベントでした。

スタッフならびにスピーカーの皆様、素敵なイベントをありがとうございますっ!\\\٩( 'ω' )و ///

LTはペースに追いつけずにまとめられなかったんですが、今日聞いてきたトークはそれぞれログを取りました。 (資料が貼ってないものは、見つけ次第足します)

色々新しい情報とか参考になる話を聞けたので、明日は気になるところを少し深掘りとかしてみようかなー。

iOSDC Japan 2016 参加メモ: A-11 Xcodeで快適なデバッグライフを追い求める

Xcode

  • XcodeなくしてiOSの開発はありえない
    • 原因にいかに早くたどり着くか

クラッシュしたらAppDelegateだった問題

Exception Breakpointを追加

  • Breakpoint追加時に Exception Breakpoint を選んで追加

    • ただし、Exception前提で書かれていると意図と違うタイミングでbreakしてしまう
      • storyboardがなければフォールバックする、とか
  • Diagonosticsを設定

    • 不正なメモリ操作を検知
    • dynamic library
    • Edit Schemaから設定できる
      • Enable Zombi Object
      • Enable Address Sanitizor -> パフォーマンスは下がる
    • アセンブラレベルまでクラッシュした場合、これがあれば追える

どのViewControllerかわからない問題

  • 新しいプロジェクトに入ると。。。

  • Symblic Breakpointを追加

    • SymbolにviewWillAppear / viewDidLoadなどを追加
      • commandで bt 0するとでる
    • viewControllerで設定しておかないと、Symbolic Breakpointが効かない
  • Share Breakpointすると、チーム間で共有できる

起動時に特定のViewControllerにしたい問題

  • デバッグ時に深いページ開くの辛い。。。
  • Environment Variables
    • Edit Schemaから設定できる
      • この環境変数を参照して挙動を変える処理をAppDelegateに書いておく
    • メリット
      • Xcode から起動した時のみ有効になる!
      • 一時的な挙動の切替に便利

端末のログやファイルを取得したい問題

  • 実機のログやRealmをみたい

    • できるけどめんどくさい
  • LLDBを使って該当ファイルをSlackに送信

    • breakpointでbreakしてコマンドを打つ
    • gistに公開しました
      • ./llidbinit の中に呼び出しを入れておく

まとめ

  • 快適になると良いね!

QA

  • Closureの中でオブジェクトを参照する方法とかありますか?

    • lldbが巧くフレームを取れてないのが悪そう
    • 2連発で取ると巧く行くことはある。。。けど基本諦めてる
  • Breakpointとlogが多すぎてわからなくなるのはどうしてますか?

    • Loglevelを切り替えられるようにしたりして、フィルタしてる

iOSDC Japan 2016 参加メモ: A-10 SwiftでJavaScript始めませんか?

SwiftでJavaScript

JavaScriptCoreとは

  • JSのランタイム実行環境
  • Swiftとの相互運用が可能

  • 使用例

    • 再ビルドをせずに実装を差し替える
    • カスタムスクリプト環境を提供
    • JSを使ってネイティブアプリを制御できる
    • Web経由でソースコードをダウンロード、など

ちょっとまった

  • 強力すぎないか?
  • 審査通る?

    • 考えてなかった!
  • 環境

基本的な使い方

  • JavaScriptCoreをimport
  • JSContext生成
  • JSコード実行
    • evalの結果はcontextに溜まっていく
  • 実行結果をSwiftで受け取る
    • 返り値をSwiftで受け取れる

変数の扱い

  • JSValueで表現

    • toTypenameメソッドでSwiftの型にできる
    • isTypenameプロパティで判定してから取り出せる
  • オブジェクトもJSValueで

    • swift側からforPropertyなどで取り出したりできる

JavaScript API

  • JSの基本的な組み込み機能だけが備わっている
  • DOMなどの高度なものはない

  • 自分の手でAPIを構築していく

    • やり方は色々
      • JSからでもSwiftからでも
  • 変数/関数/オブジェクトをJSで定義する

    • 普通にeval
  • Swiftで定義する

    • setObjectすることで、JS上で参照できるようになる
    • 参照型だと共有しちゃう
  • 関数をSwiftから取り込む

    • クロージャをコンテキストに設定する
    • AnyObjectにキャストしてsetObjecすると、JS上から呼び出せる
  • Swiftの型をJSで使う

    • @objcをつけてNSObjct継承してやれば、渡せる
    • インスタンスを渡す事もできる
    • meta typeを渡すこともできるので、JSの中でインスタンス化することも可能
  • Swiftの機能をそのままJS上で使える!

コードを書きやすくする方法

  • 普通に書いてると読みづらい
  • プロジェクトにJSファイルを組み込んで、Bundleから読み込んでStringにしてevalに流してあげれば楽にできる

まとめ

  • JSをSwiftから簡単・自在に扱える
  • 審査通るかは、後日!

QA

  • ECMAScript 2016は対応してる?

    • 行けそう
  • JS側でSwiftのオブジェクトを参照した場合、開放されたオブジェクトの扱いはどうなる?

    • JS Managed Valueあたりを見るとわかるかも
  • React Nativeは使ってたはずなので、審査は通りそう

iOSDC Japan 2016 参加メモ: B-9 Swiftのこれまでの動向のまとめと今後のさらなる発展の期待

  • @_mono 小野 将之さん Join.us の中の人

Swiftの変遷

これまでをおさらい

  • 2014/06公開

    • WWDCでSwiftを公開
    • 良かった点
      • ダンな言語仕様
      • リファレンスの出来も良かった
      • Xcode 6ですぐ使えた
      • 既存との混在もできた
    • 悪かった点
      • 頻繁にXcode / コンパイラのクラッシュ
      • ビルドが遅い
        • ちょっとした変更でも全体ビルド
    • 当時はまだ色々言語仕様がなかったがまぁOKな範囲
  • 2015/09

    • Swift 2
    • 主な不満点が解消
      • クラッシュ頻度低下
      • 差分ビルド対応
      • 言語仕様が十分揃ってきた
  • 2015/12/03

これからの話

  • Swift 3.0

  • Swift 2.2

    • 3.0のプレリリース的扱い

Swift 3のアップデート内容

  • 最後の大きな破壊的変更

    • 微妙な言語仕様を全面見直し
  • あらゆるものをSwiftyに

互換性問題

  • 後方互換性の保証では、ない
    • バージョンアップのたびの破壊的な変更はなくなりそう
  • ABIの安定化は4.0に持ち越し
    • 古いSwiftでビルドしたライブラリとリンク可能になる

Swiftyにしていく

最後に

  • 連載もよろしくね!

QA

  • Swift 3を使いはじめるのはいつ頃をめどに考えればいい?

    • 仕様変更は、そろそろなくなると思う
    • 使い始めはエンジニアがどれくらい熟知しているか、かも
    • 自動コンバートツールもついてくる
  • 逆に3で不満な変更点は?

    • 個人としてそんなに反対な変更はない
  • 一番素晴らしい変更は?

    • 無駄な部分をそぎ落としていこうという姿勢がいいと思う
  • Swift3の正しい書き方とか、ガイドになるようないいものありますか?