OkHttp 4.xと3.xでのバイナリ非互換の事例

GitHub Actionsのcheckoutアクションがv2でいろいろ変わって便利になっていた

GitHub Actionsをそこそこ使っている今日この頃です。さて、Actionsといえば普遍的に使う、リポジトリをチェックアウトする actions/checkout がありますが、このアクションがv2になり、色々と挙動が変更・改善されてい便利そうなのでいくつかご紹介。


  • fetchのdepthがデフォルトで1になり、フェッチが速くなった
  • チェックアウトの際に使用されたActions発行のトークンがgitのconfigに永続化され、リモートへのpushなどの操作が設定要らずでできるようになった
  • ブランチのチェックアウト時にはローカルブランチを作るようになった(detached HEADにならない)
  • チェックアウト先のパスを指定する path設定が絶対パスではなく $GITHUB_WORKSPACE 基準の相対パスになった

特に1〜3つ目は細かい困りごと・面倒ポイントを潰してくれていて好印象です。アクションの新バージョンには気づきにくいですが、どんどんアップデートして便利に使っていきたいですね。

追記

submoduleのチェックアウトが逆にv2では現在サポートされていないということなので、手でやる必要があり要注意です。この手段もSSHでは動かないとかもあり、submoduleを使っている方はしばらくv1の方がいいかもしれません。

https://github.com/actions/checkout#checkout-submodules

- uses: actions/checkout@v2
- name: Checkout submodules
  shell: bash
  run: |
    auth_header="$(git config --local --get http.https://github.com/.extraheader)"
    git submodule sync --recursive
    git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1

和暦と改元とうるう年が組み合わさったバグの思い出

あけましておめでとうございます。新年一発目の投稿は2019年の思い出です。

ということで本年もよろしくお願いします 🙏

2019年のSwiftモック事情

こんにちは、id:ikesyoです。これは はてなエンジニア Advent Calendar 2019 17日目のエントリーです。


昨日12月16日(月)に行われた 年末だよ Android/iOS Test Night - 2019 にて、『2019年のSwiftモック事情』という発表をしました。

Swiftでテストのためのモックを用意するとなると、リフレクションでめちゃくちゃするということができないので、素朴に手で書くか、コード生成をすることになります。今回の発表ではコード生成に主眼を置き、以下の4つの選択肢を紹介しました。

それぞれの機能や違いなど詳しい内容は、ぜひ発表のスライドを見てみてください。

Swiftでのモック事情については、今年4月の Mobile Act KYOTO #1 でも発表をしていました。

しかしこの後の8ヶ月で意外と状況が変わっており、その差分を今回の発表に入れ込んでいます。

  • SwiftyMockyの設定ファイルとコマンドが変わった
    • Before: 設定ファイルはmocky.yml、コマンドはsourceryを直接利用
    • After: 設定ファイルはMockfile、コマンドはswiftymockyという専用のものが用意された(Sourceryの存在をラップ・隠蔽)
  • Cuckooの機能追加
  • Mockoloの発表とリリース
    • Uber製のモックジェネレーターで、コード生成が高速であるのが売り
    • 5月に開催されたUIKonf 2019での発表で公表され、OSSとしてリリース予定とされていた
    • 9月に1.0.0がリリースされた

Mockoloについては、UIKonfのセッション動画が公開されており、開発者自ら独自のジェネレーターを作るに至った背景や、高速化のためにやったことを丁寧に説明してくれています。こちらもぜひ見ましょう!

ということで、2019年末時点でのSwiftのモック事情をご紹介しました。どのツールを使うかは、

  • 機能
  • APIの好み
  • チームメンバーの規模や習熟度
  • プロジェクト(コードベース)の規模

など複数の要素に影響されると思います。ぜひ自分たちに適した選択肢を導入してみて、Swiftのテストライフを豊かなものにしていきましょう! 🤖


あわせて読みたい

Android公式のDagger導入ドキュメント

Android Dev Summit 2019の文脈でAndroid公式のDaggerに関するドキュメントやCodelabが出てきて取っ付きやすくなった感じがします。いいですね。

Codelab

Dev Summitの動画

iOSDC Japan 2019でXCFrameworksのLTをします

こんにちは。iOSDC Japan 2019の0日目参加のため東京に上陸しております id:ikesyo です。明日1日目の16:15からTrack Bで『5分でわかる!Xcode 11から使えるXCFrameworks』というタイトルでLTをします。

どういう内容かは紹介文を読んでいただきつつ、先月行われたスピーカーディナーでの1分間ピッチの動画も上がっているので、タイトルや紹介文でLTの内容にちょっと興味が出てきたら、ぜひ動画も見てみて、当日LTを聴きに行くかどうかの参考にしてもらえればと思います。

ちなみに私はiOSDC Japanで4年連続4回目のLT登壇(自分調べではただ一人!)となります。今年もこの場で発表できて嬉しい・楽しい気持ちも持ちつつ、少しでも有益な情報を持ち帰ってもらえればと思います。それでは会場でお会いしましょう!🤗

CI/CD Test Night #4で、Swift製ライブラリのLinux対応 with Travis CIについて発表しました

Test Nightに初めて参加してきました(iOSやCI/CDも含めて)。普段は概ねiOSやSwift関係の勉強会・カンファレンスへの参加がメインなので、異なる軸での勉強会の参加するのは新鮮で楽しかったです(けど結構スマホアプリ絡みやBitriseの話も出ていた)。

👇発表資料はこちらです。

最近はBitriseやCircleCI、Azure PipelinesなどのCIサービスの方が耳目を集めており、Travis CIに関する話をあまり見ない気がします。しかしTravis CIのBuild MatrixとOSS向け無料プランは、OSSのライブラリで簡単に複数OS・複数言語バージョン対応をやるのにかなり便利だと思っているので、使ってみる方が増えるといいなと思います。

ここで2年前の id:KishikawaKatsumi さんのツイート:

一方でAzure PipelinesのOSS向けプランでの、macOSサポートも含めた10並列無料もかなり魅力的に映る(Travis CIのOSS向け無料プランでは、macOSの同時実行は2並列まで・分割はいくらでも)ので、そちらも試していきたい今日この頃です。小ネタですが、YAMLのアンカーとエイリアスで重複を整理するのは、他のCIサービスの設定ファイルでも活用できると思うので、どうぞお試しください。

またXcode 11でSwiftPMがXcodeに統合され、iOSアプリ開発にも使えるようになることから、今後SwiftPMのパッケージが増えていくと思います。UIと関係しない(UIKitを使わない)ようなライブラリであればLinuxへのポートも現実的だと思っているので、どんどんLinuxをサポートするパッケージが増えて、サーバーサイドSwiftもそうですし、Swift全体のエコシステムが活発になると嬉しいですね!

その他の発表者の方の発表資料はこちらからどうぞ。