チームでのスマホアプリエンジニア採用のために求人票について考えていた

こんにちは。近頃はSwiftUIでの新機能開発に勤しんでいる id:ikesyo です。 そんなこんなで自分が所属しているはてなのマンガアプリチームでは最近、iOSエンジニア・Androidエンジニアを積極採用しようと動き出しています。その中でまず求人票の内容を検討し…

GitHubのPRのコードレビューにおけるsuggestionとコミットの凝集度、完全性について

GitHubのPRのコードレビューではsuggestionという、PRの差分に対して変更を提案する機能がある レビュイーは、レビュワーからのsuggestionを1つずつ適用(コミット)するのと、複数個まとめて適用することができる プルリクエストでのフィードバックを取り込…

35歳になった

本日7月29日で35歳になりました。この1年は Webアプリ開発チャレンジ GoでGraphQL API作ったり Next.jsでフロントエンド作ったり SwiftUIをガッツリ使い始めた という感じでした。 社のDeveloper Blogのアンケートシリーズに取り上げてもらったりもしました…

WEB+DB PRESS総集編[Vol.1~120]の特別企画にSwift担当として寄稿しました #wdpress

なんと20年分のバックナンバーが収録された総集編の特別企画「進化するプログラミング言語の魅力」のSwiftの章を担当させていただきました。 WEB+DB PRESS総集編[Vol.1~120] (WEB+DB PRESSプラスシリーズ)作者:泉水 翔吾,櫻庭 祐一,宇佐美 健太,笹田 耕一,牧…

SwiftOnTap: SwiftUIの用例集付きAPIドキュメント

SwiftUIを使い始めて、フレームワークが提供する既存のViewに何があって、どういう表示になるのかがまだピンとこない。そんな状況の手助けになるのがSwiftOnTapというサイトです。 swiftontap.com 各ViewやModifierなどの説明にサンプルコードとその実行結果…

NimbleをSwiftWasmに対応させてみた

SwiftWasmとは、SwiftをWebAssemblyにコンパイルしてブラウザやその他WebAssemblyランタイムで動作するようにしようという野心的なプロジェクトです。 ちなみにSwiftWasmには id:kateinoigaku さんがco-maintainerとして多大な貢献をされています。 fortee.j…

現代ではSwiftの条件コンパイル用のフラグ定義にはOTHER_SWIFT_FLAGSではなくSWIFT_ACTIVE_COMPILATION_CONDITIONSを使う

タイトルがすべてです。意外と忘れがちなので。 developer.apple.com Active Compilation Conditions is a new build setting for passing conditional compilation flags to the Swift compiler. Each element of the value of this setting passes to swif…

uber/mockoloのclassモック生成のバグを修正した

uber/mockoloとは Uberが開発するSwift用のモック自動生成ツールで、ここ1〜2年で採用が増えていそうな雰囲気 2019年のSwiftモック事情 - いけだや技術ノート でも紹介しました logmi.jp というものです。 mockoloはv1.1.3からprotocolだけでなくclassのモッ…

App Storeの定期購読・無料トライアルの基準タイムゾーンはUTC

iOS

App Store Connectのドキュメント(ヘルプページ)にはこうあります: 自動更新登録は、1 か月間の日数ごとではなく、最初の購入の暦日と同じ日に更新します。たとえば、カスタマーが 1 か月の無料トライアルを 1 月 7 日に開始する場合、トライアルが終了す…

URLのパスの分割方法による結果の違い

let url = URL(string: "https://example.com/foo/bar")! url.path // "/foo/bar" url.path.split(separator: "/") // ["foo", "bar"] url.path.split(separator: "/", omittingEmptySubsequences: false) // ["", "foo", "bar"] url.pathComponents // ["/"…

2021年2月末でRxJava 2.xがEnd-of-Life (EoL)を迎えた

github.com ⚠️ This is the last planned update for the 2.x version line. After February 28, 2021, 2.x becomes End-of-Life (EoL); no further patches, bugfixes, enhancements, documentation or support will be provided by the project. これまでA…

Reactコンポーネントの定義にFCではなくVFCを使う

[RFC] React 18 and types-only breaking changes · Issue #46691 · DefinitelyTyped/DefinitelyTyped [@types/react] add VoidFunctionComponent type which does not accept "children" by awmottaz · Pull Request #46643 · DefinitelyTyped/DefinitelyTy…

React用のカルーセルコンポーネント

ざっと目に着いたものをリストアップしてみる。スターの多さでいうとreact-slickが最強のようだけど、issueの数も200件超と多いのは気になる。そこまでデファクトスタンダードと呼べるものはないのだろうか? github.com jQuery用のカルーセルプラグインのsl…

Amazon RDS/Amazon AuroraのデフォルトタイムゾーンはUTC

AWS

備忘録です。 MySQL on Amazon RDS - Amazon Relational Database Service By default, the time zone for an RDS MySQL DB instance is Universal Time Coordinated (UTC). You can set the time zone for your DB instance to the local time zone for you…

Amazon ECRのライフサイクルポリシーのタグプレフィックスリストはOR条件ではなくAND条件

AWS

突然のAWSの話題です。 Amazon ECR (Elastic Container Registry)はDockerコンテナレジストリのサービスです。コンテナイメージをどんどんプッシュしていくと無限に溜まっていってそれだけストレージコストが掛かってしまうので、不要になったイメージは適度…

GitHub Actionsのpathsによる条件付き実行にまつわる落とし穴と困りごと

paths と言っているのはこれです。 https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#onpushpull_requestpaths When using the push and pull_request events, you can configure a workflow to run when at least one fil…

GitHub ActionsでファイルAが更新されているがファイルBが更新されていない時だけ実行する、を実現する

GitHub Actionsの on: push や on: pull_rerequest のトリガーには paths/paths_ignore という機能があり、特定のファイルパスが変更された時だけワークフローを実行できます。 # 例えばiOSとAndroidのmonorepoで、ios以下が変更された時だけiOSのテストを実…

`MenuItem.onNavDestinationSelected`と`android:menuCategory="secondary"`の関係

https://developer.android.com/reference/kotlin/androidx/navigation/ui/package-summary#(android.view.MenuItem).onNavDestinationSelected(androidx.navigation.NavController) By default, the back stack will be popped back to the navigation grap…

GitHub ActionsのXcode 10.3ではSwiftPMのビルドがエラーになる

GitHub ActionsではmacOSも実行環境としてサポートされており、現在のOS指定はmacos-latest/macos-10.15の1つのみです。以前はmacos-10.14もサポートされていたのですが少し前に非推奨となり削除されてしまいました。 その際に使用できるXcodeのバージョンも…

Swift 5.2では関数・メソッドの最後の引数がデフォルト引数の場合、その1つ前のクロージャの引数をtrailing closureとして呼べるようになった

タイトルがほぼ全てです。 func foo(_ closure: () -> Void, defaultArg: Int = 0) { closure() } foo { print("foo") } このコードはSwift 5.2では動作しますが、Swift 5.1以前ではコンパイルエラーになります。 Nimbleに挙がったissueでそのことに気付きま…

GitHub ActionsでのJestのテスト実行時に失敗箇所をPRへのアノテーションとして表示するレポーター

このような便利なパッケージがありました。 GitHub Actionsにはworkflow commandsと呼ばれる、echoコマンドと特定の形式の文字列を使うことでActionsの処理に一部介入できる機能があります。その中にはファイルの特定の箇所(行・カラム)にdebug/warning/er…

AndroidのFirebase Installations version 16.2.0で追加されたlintチェックがAndroid Gradle plugin 3.6と互換性がなくてビルドできない

Firebase OSSのこちらのIssueで報告されているように、Android Gradle plugin 3.6(Android Studio 3.6)以上のプロジェクトでFirebase Installations version 16.2.0が依存性に入るとlintでビルドが失敗するようになります。 追加されたlintというのはこち…

Swift 5.2

iOS 13.4とXcode 11.4と共にSwift 5.2がリリースされましたね。 Swift.org - Swift 5.2 Released! SE-0249 Key Path Expressions as Functions 関数・クロージャが要求される箇所でKeyPathリテラルを書くとKeyPath型ではなく関数・クロージャを返してくれる…

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

Kotlinで書き直されたOkHttp 4.xはJavaで書かれた3.xと基本的にソース互換性・バイナリ互換性が保たれているが、バイナリ非互換でクラッシュするケースに遭遇した。https://t.co/ZE0VV1Gkwm— Sho Ikeda (@ikesyo) 2020年2月17日 具体的には、「OkHttp 3.xのJ…

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

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

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

iOS

あけましておめでとうございます。新年一発目の投稿は2019年の思い出です。 そういえば去年面白かったバグで、とある有効期限チェックで、2019年8月から半年後の月末が2020年2月末、つまり閏年なので2月29日になるのだけど、よくある和暦バグと組み合わさっ…

2019年のSwiftモック事情

こんにちは、id:ikesyoです。これは はてなエンジニア Advent Calendar 2019 17日目のエントリーです。 昨日12月16日(月)に行われた 年末だよ Android/iOS Test Night - 2019 にて、『2019年のSwiftモック事情』という発表をしました。 Swiftでテストのた…

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

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

iOSDC Japan 2019でXCFrameworksのLTをします

iOS

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

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

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