yoppieのブログ

フリーランスエンジニア始めます

iOSアプリ開発の同人誌を書きました

業務でiOSアプリ開発を始めて1年9ヶ月経ちました。
新機能の開発や保守改善を行う中で、得た知見や問題解決したことがたまってきました。
それらの中から3項目を選び、1冊の同人誌としてまとめました。
タイトルは「解決!iOSアプリ開発のアレコレ」です。

章の構成

章の構成は以下です。全部で50ページとなりました。

第1章 SwipeableStack

SwiftUIでは、Listに子Viewを列挙することでリストを実現でき、その子Viewに対してswipeActionsを利用しスワイプを可能にします。
しかし親ViewがList以外の場合、子ViewにswipeActionsを利用しても、スワイプは適用されません。
よって、親ViewにListを使わずに構築しているリストなどの子Viewにスワイプを適用する場合、swipeActionsを適用できないため独自実装が必要となります。
本章では、Listではない親Viewの子Viewにスワイプを適用するために独自実装したSwipeableStackを紹介しています。

第2章 ロック画面のWidget

iOS16からロック画面にWidgetを表示できるようになりました。
本章では、ロック画面のWidgetでできること、できないことをまとめています。

第3章 Compose for iOSに入門

KotlinConf 2023でCompose for iOSのアルファ版が公開されました。
Jetpack Composeを用いてiOSアプリを作成することができます。
本章ではCompose for iOSに入門し、分かったことを紹介しています。

表紙

表紙はこちらです。

8種類目の表紙なのでフォトショを使いこなせるようになり2時間ぐらいでできました。

技術書典

技術書典15で「解決!iOSアプリ開発のアレコレ」を新刊として販売しました。
物理本、電子版両方500円です。

今後の執筆活動

「解決!Androidアプリ開発のアレコレ」はシリーズ化しており、3種類出していますが、Androidに続きiOSまで書くとは思っていませんでした。
もしかしたらiOSもシリーズ化するかもしれません。ただし、物理本は入稿したり持ち運びがしんどいので今後は電子版だけにするかもしれません。

また、ありがたいことにインプレスR&Dの方から「解決!iOSアプリ開発のアレコレ」の商業版刊行のお誘いを受け、現在執筆中です。

3冊目の商業誌を出しました

「エンジニアのための英単語辞書」というタイトルで3冊目の商業誌を出しました。

nextpublishing.jp

以前にインプレスR&Dの方から商業版刊行のお誘いを受け、以下2冊の商業誌を販売しています。

そしてありがたいことに、技術書典14で新刊として販売した「エンジニアのための英単語辞書2」の商業版刊行のお誘いをインプレスR&Dの方から受け、2023年10月27日から販売を始めました。

3冊目の商業誌となります。 商業誌を販売するまでの手順は「2冊目の商業誌がでました - yoppieのブログ」に書いているので、3冊目の商業誌に特化したことを書きます。

商業誌の内容

商業誌として販売するエンジニアのための英単語辞書は、同人誌の「エンジニアのための英単語辞書」と「エンジニアのための英単語辞書2」をまとめて1つになっています。

カテゴリ

エンジニアのための英単語辞書はソフトウェア開発をする際の、似たような意味の英単語をカテゴリに分類してまとめた同人誌です。 よって2種類のエンジニアのための英単語辞書を1つにまとめるにあたり、カテゴリを修正しました。 修正後のカテゴリ一覧は以下です。

  1. コンピュータ
  2. プログラミング
  3. DB関連
  4. データの送受信
  5. スレッド
  6. インスタンス
  7. 命名
  8. UI関連
  9. 位置
  10. ユーザ関連
  11. 開発業務
  12. その他

Re:viewに移行

エンジニアのための英単語辞書はGoogleDocを使って作成した同人誌でした。 商業誌にする都合上、Re:viewを使う必要があったためGoogleDocからRe:viewに移行しました。

表紙

表紙のデザインはこちらです。
デザイナーの方が作ってくださっているのでクオリティが高いです。

感想

ありがたいことに「エンジニアのための英単語辞書」と「エンジニアのための英単語辞書2」は多くの方が買ってくださっています。
商業誌の「エンジニアのための英単語辞書」も多くの方の役に立てれば嬉しいです。

逃げも1つの戦略

今年の7月から始まった案件ですが、かなりミスマッチだったので8月中旬で逃げることに(契約終了)しました。
具体的にどうミスマッチだったかを投稿しかけましたが、案件の内容やその企業の中身をさらすことになり、リスク高いなーと思ってやめました。
この記事では逃げることと9月以降の案件の契約について書きます。

逃げること

僕は今までの人生の中で何度も逃げた事があります。 例えば、

  • 大学4年時に研究が嫌すぎて海外に逃げる
  • 大学院1年時に研究が嫌すぎて中退

です。どちらも精神的にきつかったので逃げて良かったと思っています。

チャレンジと逃げ

学校に行ったり、人と会ったり、社会にでたりすると、今まで経験したことがない刺激や、経験したことから予測することができない刺激を得ます。
意図的に何かにチャレンジする場合、その刺激は大きいはずです。
チャレンジをして適度な刺激を得て成長することは良いですが、刺激が大きすぎる場合精神的にきつくなります。
また、チャレンジをして適度な刺激を得たとしても、その刺激が成長につながっていない場合も精神的にきつくなります。
僕はいろんなことにチャレンジしますが、精神的にきつい場合いつもすぐにパッと逃げます。

逃げやすいようにする

  • もうちょっと我慢したら現状が変わって精神的に楽になるかも
  • 周りの人と一緒やしこのままでいよう

という思考になりがちですが、変える事ができるのは自分の言動のみで、自分は周りの人とは違う価値観を持つ別人なので、この思考はしないようにしてます。
また、人と環境を変えるにはかなり時間が必要なので、技術力を上げるチャレンジを行なっている最中は人と環境を変えることはしないです。
そして、逃げやすいように依存を減らしています。
フリーランスは正社員と比べて企業との関係は薄いです。ほとんどの準委任契約では、契約解除はいつでもでき、遅くとも契約期間が終わったら逃げられるため、いっぱいチャレンジをしたいと思っている間はフリーランスを選ぶつもりです。

誰かと一緒に逃げる

逃げ、ミス、失敗、この辺りのワードはマイナス面の刷り込みがあります。
よって、一人で逃げるのが難しければ、だれかと一緒に逃げたり、だれかに逃げるのを助けてもらうのもありだと思います。

9月の契約

今年の7月から始まった案件が8月中旬で契約終了したので、思いがけず3週間ほど夏休みを満喫していました。
9月は以下の2案件を契約します。

だいたい合計160h / 月となる見込みです。

新しい契約

新卒で入社した企業でかなりお世話になった方がいる企業と準委任契約を交わしました。
Androidアプリ開発の直契約です。
間に入っていただき、僕が納得のいく条件で契約することができとても感謝しています。
縁は大事だなーとつくづく思います。

久しぶりのAndroidアプリ開発

今回も僕にとってチャレンジ要素が多い案件になりそうでとても楽しみです。
Kotlin好きなので、久しぶりに業務でKotlinを書けるのも嬉しいです。

10月以降の契約

2021年4月から継続してきた契約を9月いっぱいで終了することになりました。(こちらは逃げではありません)
この契約では、AndroidiOSの両方のアプリ開発をしましたが、とても多くのことを学ぶ事ができました。(別の記事で具体的に書く予定)
よって、今のところ10月以降の契約は「Androidアプリ開発 3日(24h) / 週」のみです。
余力がありそうなので、FlutterかiOSで約60時間 / 月ぐらいの案件を探していこうかなーと考えています。
もしくは、アメリカのスタートアップ企業に興味があるので、週休4日を活かして日本からアメリカのスタートアップ企業にリモートで働く方法を模索しながら準備するのもありかなーとも思っています。

Flutter案件 始動

フリーランスになり4年2ヶ月経ちました。5年目に突入してますがいろんなことに挑戦してきたのでかなり濃かったです。
最初の案件で業務未経験のAndroidアプリ開発(KotlinとAndroid SDK)にチャレンジし、その後業務未経験のiOSアプリ開発(SwiftとiOS SDK)にもチャレンジしました。
7月からは本格的にFlutter製のアプリ開発の案件にチャレンジします。
主に新しく始動するFlutter案件について書きます。

契約内容

7月以降の契約は、iOS案件とFlutter案件の2つです。
iOS案件は時間幅のみ変更で、Flutter案件は新規の契約です。

今までの契約 7月以降の契約
iOS案件 約140時間 / 月 約60時間 / 月
Flutter案件 なし 約140時間 / 月

Flutter案件の内容

最近上場したベンチャー企業が運営するヘルスケアサービスのiOSAndroidアプリの開発をします。
面談を通して得たことなどをまとめると、

  • フルリモート
  • エンジニア主導の文化
  • 話を聞く限り技術力の高い人が多そう
  • フラッター案件の中では報酬高め
  • チャレンジを推奨する文化

などの特徴があり、かなりマッチしていそうだと感じています。
実際に業務を行ってみて想定とどういうギャップがあったかはまた書きます。

Flutter案件に取り組む際の不安

今までAndroidアプリ開発iOSアプリ開発を行ってきたので、アプリ開発の要領はある程度把握していますが、Flutter(クロスプラットフォーム)ならではの問題に遭遇した時に解決までたどり着けるかが不安です。
例えば、Flutterではカバーしきれない内容を各OS側のコードを修正することで実現できるかどうかです。
ただ、今まで様々な問題に遭遇しましたがなんとかなったので、いけやろーと楽観的に捉えています。
問題に遭遇してから工夫して解決するプロセスと、どうなるかわからない不安と、プレッシャーを体験できるのがチャレンジのおもしろさだと思っています。
Flutter製のアプリ開発が元々好きなので、Flutter案件でこのおもしろさを体験できることがとても嬉しいです。

技術書典14も楽しかった

技術書典14にサークル参加してきました。

オフライン会場

技術書典14の開催期間は05/20(土)〜2023/06/04(日)で、05/21(日)のみオフライン開催がありました。

ENGINY

いつも妻と二人で参加しています。僕たちのサークル(ENGINY)はこんな感じです。
展示する同人誌が7種類になり、横一列に並べられなくなったのでA5の本は上下に配置しています。
既刊のエンジニアのための英単語辞書の続編の新刊エンジニアのための英単語辞書2を買ってくれた方が多く、売り切れました。
また、既刊6種類もそこそこ売れたので全種類準備して良かったです。

会場

会場はこんな感じです。 いっぱい写真を撮ろうと思っていましたが、常に来場者が多く写真を撮るのが難しかったです...

サークル参加の良さ

朝早くに会場に入って準備をする必要がありますが、サークル参加をすると自分の好きなタイミングで会場を回って買い物できるので良いです。

売り上げ

技術書典14を含めた今までの同人誌(商業誌を除く)の売り上げが気になったので洗い出してみました。

物理本 電子版
解決!Androidアプリ開発のアレコレ 118 57
解決!Androidアプリ開発のアレコレ 実践編 25 53
解決!Androidアプリ開発のアレコレ 保守・改善編 46 29
初心者による初心者のためのFlutter詳解 46 26
エンジニアのための英単語辞書 240 218
エンジニアのための英単語辞書2 44 27
正社員・フリーランス エンジニア 徹底比較 39 27

合計99.8万円になりました。けっこう売り上げたなーという印象です。

最後に

業務でiOSアプリ開発を行っていますが、アウトプットが少ないので、元気があれば次の新刊はiOSアプリ開発の同人誌を書こうと思っています。
次の技術書典15の開催期間は11月11日(土) ~26日(日)で、11月12日(日)のみオフライン開催を予定しているようです。

技術書典14にサークル参加します

技術書典14に当選したので、サークル参加します。
今回はオンライン・オフライン同時開催となっています。

  • オンライン: 2023/05/20 (土) 〜2023/06/04(日)
  • オフライン: 2023/05/21 (日) 11:00~17:00

今までに

を書きました。
技術書典7~13にサークル参加し、その内新刊を出さなかったのが技術書典10だけなので、改めて考えると気持ち悪いぐらい書いてるなーと感じます。
毎回サークル参加する時に、最初は新刊出すのだるいからやめとこうと思うのですが、技術書典の運営からすると新刊があったほうが嬉しいのかなとか、運営の方は鬼忙しい中いつもきっちり開催してくれているので、ちょっとでも貢献したい気持ちになり、新刊を出しています。

新刊

技術書典14に合わせてエンジニアのための英単語辞書の続編の「エンジニアのための英単語辞書2」を書きました。物理本と電子版両方出します。

目的

エンジニアのための英単語辞書は僕がソフトウェア開発をする際に、似たような意味の英単語が多いことが苦だったので、使うシーンに応じてまとめた同人誌です。
目的は以下です。

  • プログラムを書く時や会話する時などの英単語を選ぶ時間を短くすること
  • 人によって選ぶ英単語が異なる機会を少なくすること

目次と概要

  1. UI関連
    • 画面、画像、動画、スペース、非表示、区切り線
  2. 位置
    • 上、下、左、右、中央
  3. コンピュータ
    • 元に戻す、切断、入力、権限、コンパイル、履歴、保管、シミュレーション
  4. プログラミング
    • ひとまとまり、要求、挿入、配列、型
    • 増やす、減らす、1つの
    • 期間、遅延、現在の、前の
  5. その他
    • 元となる、リンク、資産、主部、主、準備、監視、推薦、携帯電話、アプリ、流れ、特性、試行、入れ物、階層、影響

中身

3ページ分だけ中身を紹介します。


表紙

作成した表紙です。

入稿

表紙の作成と中身の執筆が終わり、入稿が終わりました。
物理本の完成が楽しみです。

技術書典の運営への審査提出も終わったので、残りのタスクはわずかです。

サークル配置

ENGINYというサークル名で参加します。サークル配置は「け01」です。

新刊以外の既刊6冊の物理本と電子版も販売します。
興味のある方は是非、技術書典14にサークル参加するENGINYというサークルを見てみてください。

iOSエンジニアになって1年経ちました

2022年4月からiOSアプリ開発の業務を始め、1年経ちました。
経験したこと、分かったこと、感想をまとめます。

行った業務

様々な業務がありましたが、主にAPIを叩いてサーバーから受け取ったデータを加工してUIに反映するという基本的な流れを、色んなパターンで実装してきました。
初めてのことだらけで苦戦だらけでしたが特に

  • Actionを用いた非同期処理
  • Viewの制約の付け方

に苦戦しました。

Actionを用いた非同期処理

ActionというRxSwiftとともに利用するライブラリがあります。
これはInputを受け取ってworkFactoryというクロージャを実行し、OutputをObservableとして返します。
このライブラリに慣れるまで時間がかかりました。

Viewの制約の付け方

親子関係のView同士や、兄弟関係のView同士の制約をつける際に、AndroidだとConstraintLayoutを使って制約をつけますが、iOSだと全てのViewに制約をつけられます。
その制約をつける方法にはStoryboardでつける方法と、コードでつける方法があり、AndroidのConstraintLayoutに慣れてしまっているせいか難しく感じます。

SwiftUIへの移行

UIKitの世界からSwiftUIの世界へ少しずつ移行していく作業をしています。

VCとVMの修正

レイアウトファイルで作成済みのViewをSwiftUIViewで同様のViewとなるように作成し、既存のVCでそのSwiftUIViewを表示します。
よってVCがVMからデータを受け取ってSwiftUIViewに渡す必要があるため、VCとVMを修正する必要があります。
デグレしないように気を使って修正しています。

描画回数の確認

複雑なViewでは、SwiftUIViewの描画回数が多くなりスクロール時のかくつきなどのパフォーマンスの低下が起こりました。
その場合はSwiftUIViewに渡すパラメータを調整し描画回数を少なくするように調整しました。

その他の業務

PRのレビュー

同じチームのメンバーがだしたPRのレビューをしています。
PRを確認することでSwiftのコードの書き方やiOSの書き方を知ることができるので、じっくり確認しています。
ただし、指摘するために知識が必要になるので、調査と勉強にも時間を費やしています。

動作確認

iPadのユーザの割合が低くはなく、iPadのみで起こる不具合や表示崩れがそこそこあるため、UIに関する動作確認ではiPad(実機)でも確認しています。

iOSAndroid両方するメリット

僕が感じたiOSAndroid両方するメリットです。

iOSAndroidの仕様の把握

例えばAndroidに存在する仕様書がない機能をiOSで実装する必要があるとします。
この場合、Androidの仕様を知っている人を探して聞くか、コードを読んで仕様を把握する必要があります。
Androidのコードを読んで理解する時間が短いと、知っている人を探して聞く必要がなくなり、自分で仕様を把握できるので楽です。

iOSAndroid両方担当する

小さい機能を作る時は、一人で一気にiOSAndroid両方作る方がコミュニケーションが発生しないので効率が良いと感じました。

最後に

同人誌の執筆

技術書典14に当選したのでサークル参加します!

既刊のエンジニアのための英単語辞書の続編となる新刊を出す予定です。
iOSアプリ開発をする上で知った英単語を記載しています。

今は中身を書き終え、校正と表紙の作成をしています。
具体的な内容は次の記事に記載します。

挑戦のバランス

いきなり複数のことに挑戦したり、挑戦する幅が大きすぎるとしんどくなり業務を楽しめなくなります。
しかし全く挑戦がないと成長しなくなります。なので少ししんどいぐらいが良いと感じています。
iOSアプリ開発へのチャレンジは少ししんどいぐらいだったので、ちょうど良かったです。
これからも少ししんどい状況を継続していきたいです!