『Production Ready GraphQL』の「Anemic GraphQL」

この記事は はてなエンジニア Advent Calendar 2022 の2023年1月3日の記事です。 昨日は id:onk で ストーリー性のあるプレゼン - id:onk のはてなブログ でした。 『Production Ready GraphQL』といえば Production Ready GraphQLはGraphQLを採用するなら必…

UIButton.Configuration.Sizeの各サイズごとのデフォルト状態での高さ

iOS

iOS 16.1シミュレーターで確認してみた。 @2x @3x UIButton.Configuration.Size.large 50.5 50.33… UIButton.Configuration.Size.medium 34.5 34.33… UIButton.Configuration.Size.small 28 28 UIButton.Configuration.Size.mini 28 28 特別にHuman Interfac…

UINavigationController配下でUIHostingControllerによって表示しているSwiftUIのViewからNavigationLinkは使えるのか

結論としては使えます。端的なPlaygroundのコードとしては次のようになります。 import UIKit import SwiftUI import PlaygroundSupport struct RootView: View { var body: some View { NavigationLink("This is NavigationLink") { Text("Hello World!") }…

iOSシミュレーター・Androidエミュレーターにアプリをインストールだけする(起動までしない)方法

なぜ アプリの初回起動時専用の特別な処理や画面遷移を行うケースで、そのデバッグ実行・動作確認をするため。 iOS まずインストールするためのアプリは Build For Running でビルドしておく。次にシミュレーターを起動しておいて xcrun simctl install boot…

RenovateのGemfileやPodfileの更新でリリースノートを取得する

Renovateは様々なデータソース・パッケージマネージャーに対応していて、もちろんRubyのBundlerのGemfileにも対応しているのだが、APIリクエストのレートリミットを回避する関係で、https://rubygems.org をデータソースとする場合はリリースノートの取得が…

GraphQLスキーマをサーバーサイドからクライアントサイドに自動同期し、変更履歴も確認したい

似たような話が先日ありましたね。 こちらはGraphQLではなくてOpenAPI、かつサーバーサイド側のリポジトリからクライアントサイド側のリポジトリにプッシュする方式でした。 今関わっているプロダクトでは、1つのGraphQLスキーマが複数のリポジトリから必要…

期間の扱い方とその名前

とあるAPIのスキーマの叩き台をクライアントサイドとして検討している際に、コンテンツの公開期間やイベントの開催期間のような期間について議論が少し盛り上がった。 要件としては、期間の開始と終了の日時をそれぞれ取得できたい。 期間を考える時、開始と…

Mockolo 1.7.0のビルド済みバイナリがarm64にしか対応していない

iOS

https://github.com/uber/mockolo/releases/download/1.7.0/mockolo.tar.gz に含まれる mockolo バイナリがarm64アーキテクチャーにしか対応していなかった。これだとAppleシリコンMacでは実行できるが、Intel Macでは実行できない。 $ file mockolo mockolo…

SwiftUIのTextは+演算子で結合できる(fontやforegroundColorなどを変えていてもできる)

SwiftUI.Text には + 演算子が用意されているので Text("Foo") + Text("Bar") のように結合ができる +(_:_:) | Apple Developer Documentation Text("Foo").font(.title) + Text("Bar").foregroundColor(.secondary) のように一部のmodifierを付けていても結…

CircleCI公式のDockerイメージにはyqがプリインストールされているので、自分で入れる必要はない

CI

CircleCIのダイナミックコンフィグとsetupワークフロー*1で、path-filtering Orbやcontinuation Orbを使う時の話題ですが、タイトルがすべてです。 github.com 設定ファイルをマージする用途でyqを使うために、自分でインストールするような記述を色んなブロ…

Open Test Reporting: platform-agnosticなテストレポートのフォーマット

たまたまJUnit 5.9.0のリリースノートを読んでいたら面白いものが目に着きました。 XML reports in new Open Test Reporting format テストレポートのフォーマットとしてはJUnitがデファクトスタンダードのようになっていて、様々なプログラミング言語やテス…

SwiftUI.ViewとUIHostingControllerの初期化順序の調整

UIHostingControllerを使ってSwiftUI.Viewを表示する時に、Viewの引数に渡すクロージャーの中でViewControllerを使いたいことが稀によくある(本当に?)。 素直に考えるとこうなる。 // 順序的にvcを使えない let view = FooView(onTap: { // vcで何かした…

RenovateのHandlebarsテンプレート用の`lowercase`ヘルパーを追加した

RenovateとHandlebarsのテンプレート Renovateでは様々な設定オプションや正規表現を用いるregex managerでHandlebarsのテンプレートを使用できる箇所があります。 例えばPRのdescriptionの内容を追加できるprBodyNotesなどがありますが、RenovateがPRを作る…

Renovateの「About us」というドキュメントにcontributorとしてノミネートされた

はい。 RenovateのAbout usというドキュメントにcontributorとして名前を載せていただきました。今後もできる範囲で貢献していければと思います!https://t.co/3qjx9Fa446https://t.co/cH06beUtqy— Sho Ikeda (@ikesyo) 2022年5月27日 こちらのページからご…

Accompanistの開発版のバージョニングが独特で、Renovateと相性が悪い

Accompanistとは Google公式の、Jetpack Composeを補完する拡張ライブラリーです。 Accompanistの開発版のバージョニング 直近の0.24系の開発版が次のようになっている。 v0.24.0-alpha v0.24.1-alpha v0.24.2-alpha v0.24.3-alpha v0.24.4-alpha v0.24.5-al…

potatotips #77で「RenovateによるiOSライブラリーの自動更新」という発表をしました&いくつかの補足

発表資料はこちらです 発表の中では時間の都合で触れられなかったところをいくつか補足しようと思います。 CocoaPodsでRealmを使っているとPodfile.lockが更新できない件 CocoaPodsとXcodeGenを併用しているとPodfile.lockが更新できない件 おわりに CocoaP…

actions/checkoutのアップデートで、gitのsafe.directoryの件が対策されていました

先週盛り上がっていた、gitのCVE-2022-24765に対する修正でreviewdogなど一部のGitHub Actions(Dockerコンテナのアクション)が動かなくなっていた問題ですが Git security vulnerability announced | The GitHub Blog 一部の reviewdog が `exit status 12…

GitHub ActionsのVirtual Environmentの更新でnpmのバージョンが変わったことでreviewdog/action-eslintが動かなくなったという面白事例

社内のとあるリポジトリ yarn workspacesを使っていた npm 7でworkspace機能が入ったので、npmでもpackage.jsonのworkspacesを認識する 4月4日にGitHub ActionsのCIが突然エラーになるようになった Virtual Environmentのバージョンが変わっているようだった…

React Nativeのアップデートのコツはビルドシステムやパッケージマネージャーの気持ちになること

半分ネタで半分本気です。 JS方面 Node.js npm/yarn TypeScript Babel, Metro iOS方面 Xcode CocoaPods Android方面 Android Studio Gradle 達と仲良くなり(詳しくなり)、あとはReact Native Upgrade Helperで差分をチェックすれば大体いけるはず。Let's u…

AndroidのNotification Channels is 通知チャンネル OR 通知チャネル

Android O(Android 8.0)から追加されたNotification Channelsですが、これの日本語訳がぶれていてどっちで会話すればいいのか困っています。 「通知チャンネル」 https://developer.android.com/guide/topics/ui/notifiers/notifications.html?hl=ja#Manag…

FirebaseのSwiftPM対応に伴ってGoogle Tag ManagerもSwiftPMでインストールできるようになっていた

iOS

iOS(ないしAppleプラットフォーム全般)のFirebaseといえばこれまでインストール方法はCocoaPodsが基本だったが、バージョン8.0.0からSwiftPMでもインストールできるようになっている。 https://firebase.google.com/docs/ios/installation-methods#swift-p…

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

こんにちは。近頃は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 日に開始する場合、トライアルが終了す…