仕事観ポエム

お久しぶりです。

 

技術ブログをお休みしてしばらく経ちましたね。(技術ブログを機にフォローして頂いた方は申し訳ありません。)

その間、副業をしたり、転職活動をしたり、本を読んだり、自問自答してみたりしていました。

そんな中で仕事観が変わってきたというか、変えてみようと思っていました。考えがまとまりましたのでここに綴ります。常体で書かせて頂きます。

 

 

エンジニアのキャリアとして、技術力をひたすら追求するのは性に合わないと感じた。

というのも、元々はやりたいことを実現するツールとしてプログラミングやSwiftをやってきていた。調べれば大体のことは実現できるようになった今、それ以上のモチベーションにならないのが正直な気持ちである。

それよりも私がいま改善したいのは、どう考えても使いにくい、クソUXを実装しろと言われイヤイヤ実装する瞬間である。

反社会的行動とは言わないが、世の中に不利益なことをやっているという認識が腹立たしかったのを覚えている。自分の間違い、思い過ごしである可能性は否定できないし、正当な意見が言えるようになりたいので、最近はUXの勉強をしている。UXデザイナーが次の仕事と決めるつもりはなく、今後も自分に必要だと思ったものを習得していき、それを評価されるポジションに居れればいいなと考えている。

今までの仕事のやり方はお金と技術力向上だけ考えていて、仕事が増えるような提言は控えるとか、定時で帰ることに固執するとか、有り体に言って手を抜いた仕事だった。要求には応えていたと思うが、期待以上の結果を出せたことは少なかったのではないか。これはSESで働いてきた中で生まれてしまった悪癖と考えている。

自社アプリの開発に携わりたいと思う中で、こうした部分は改めようと考えている。自分が作るものをクソアプリにしたくないという気持ちが分かったので、今後は"優れたアプリ作り"を目指した仕事のやり方にしていきたい。

 

また、いまの自分にはこれといった趣味も生きがいもない。仕事の時間が熱中できる時間になれたら幸福度が上がるんじゃないかとも思っている。

 

以上です。

iOSのアレいつまでに対応しないといけないんだっけ

iOS13対応っていつまで?ダークモード対応っていつまで?そういった話題はiOSエンジニアをやっていると尽きない話題かと思います。

(※簡単に解説しますと、iOSでは古い技術を使っているとApp Storeに公開ができなくなります。)

 

 

TwitterやQiitaや情報サイトを見ているとなんとなく入ってくる情報なので今までは気にしていなかったのですが、iOSエンジニアとして明確に知っておくべき問題だと思い見直すことにしました。 

ひと目でわかり常に更新されるサイトがあればいいのに…と思うので、本記事で試みたいと思います。

 

iOS13 SDK対応(iOS,iPad)

2020年4月まで

情報確度:○

Appleにて記載あり

https://developer.apple.com/news/?id=09102019a

f:id:NNkamura_Enginieer:20200109224743p:plain

iOS13 [iOS App]

f:id:NNkamura_Enginieer:20200109224957p:plain

iOS13 [iPad Apps]

Xcode11(11.3)

2020年4月まで

情報確度:○

→iOS13対応の際にツールとして必要なため

https://developer.apple.com/ios/submit/

f:id:NNkamura_Enginieer:20200109225812p:plain

Xcode11

Swift5

2020年4月まで

情報確度:△

→Xcode11とセットだと思うのですが、Xcode11でもSwift4選べるんだよな。ハッキリした記載が見つからず少し自信なしです。以下のようになると思われます。

https://conocode.com/troubleshooting/xcode-10-2-swift-version-3-unsupported/

Showing Recent Messages:-1: SWIFT_VERSION ‘3’ is unsupported, supported versions are: 4.0,4.2, 5.0. (in target ‘XXXXX’)

一応詳細です。

https://swift.org/migration-guide-swift5/

 

Sign in with Apple

2020年4月まで

情報確度:○

Appleにて記載あり

https://developer.apple.com/news/?id=09122019b

f:id:NNkamura_Enginieer:20200109224326p:plain

Sign in with Apple

https://tech.mercari.com/entry/2019/12/11/115331

詳細記事、ありがとうございます!

 

 

全部2020年4月まで!終わり!と言いたくなってきました。続きます。

UIWebView

新規アプリ:2020年4月まで

既存アプリ:2020年12月まで

情報確度:○

Appleにて記載あり

f:id:NNkamura_Enginieer:20200109232925p:plain

UIWebView

 

ダークモード

 一時しのぎ:2020年4月まで

情報確度:○

→iOS13対応の際に自動で切り替わる

 

本対応:不明(早い方がよい)

情報確度:×

→一時しのぎは非推奨。使用しないでください。

f:id:NNkamura_Enginieer:20200109233515p:plain

ダークモード

以下詳細

https://developer.apple.com/documentation/appkit/supporting_dark_mode_in_your_interface/

 

 

 

結論:

こまめにNews and Updatesを確認せよ

https://developer.apple.com/news/

これみとけば大体カバーできますやん。あるのは知っていたけれど、ここまで網羅できてるとは思っていなかった…

 

もちろんiOS13対応に付随するバグとか、ダークモードは早めに動こうとか、そういった動きは情報サイトで察知しておきましょう。

 

 

なんか徒労だった気もしますが…。ブログはいつだってそういうものです。おやすみなさい!

 

enumのAssociated Valueを使いこなす

あけましておめでとうございます。今年もよろしくお願いします。

 

 

Twitterでもお知らせしたのですが、開業しました。個人事業主です。

https://twitter.com/NNkamura/status/1203912766563553280

屋号は「モバイルアプリツクール」です。ちょっとダサくて分かりやすいネーミングが気に入っています。

 

本ブログが1ヶ月ほど止まってしまったのは、出向先の現場が変わったり、副業を始めたり、開業したりとバタついていたためです。その辺の近況報告はそのうち。

 

今回はenumAssociate Valueについてです。

 

結論から言うと「enumは色んな型をまとめられるし、メソッドも入れれるよ」という話です。

続きを読む

最近作った不具合を紹介します。

こんばんは、NNkamuraです。

 

締め切りが近づくと色んな余裕がなくなってきて、製造が雑になってしまう、なんてことないでしょうか。

自分がやってしまうことは少し自覚していたのですが、ちょっと最近多かったため自戒を込めてここに記そうと思います。

治したいレベルに合わせて優先度別にしました。

続きを読む

DispatchGroupの挙動を理解したい

まず基礎から。どっちがどっちだったか、うっかり忘れがちな私です。

 

同期

処理の完了を"待つ"

GCDのメソッドはsync〜

 

非同期

処理の完了を"待たない"

GCDのメソッドはasync〜

 

正直、ここが自分の頭になかなか入ってこなくて理解を阻んでいる気がします。

続きを読む

色々できるぞクロージャー。

夜分遅くにこんばんは。

ズルズルと伸ばしてしまっていたのが気に入らず、なんとしてでも書き上げたかったのでこの時間になってしまいました。(読んでくださる方いるのかな?)

 

以前クロージャー、トレーニング編を書かせて頂きました。クロージャーはどんな書き方が成立するのか?という視点でひたすら試してみた回でした。

https://nnkamura.hateblo.jp/entry/2019/11/10/155424

 

今回はクロージャーで何ができるの?というお話です。今まで知らなかった記法の②、③が今回書きたくて始めましたので、①のざっくり感をお許しください🙃

 

①同期処理。一番使うやつ。

 

Aメソッド:APIにて必要な情報を取得

Bメソッド:取得した情報を画面に描画

という処理を行う際、Bメソッドが先に動いてしまうと求めている動作が行われません。必ずAメソッドが終わった後、Bメソッドを呼ぶ必要があります。

この時使うのがクロージャーです。

 

これのサンプルコードは…保留にしておきます。皆さんご存知ですよね。

 

②ViewControllerをキレイにするInitialization Closure

f:id:NNkamura_Enginieer:20191119024722p:plain

letのgoButtonに初期値を設定することができる

viewDidLoadに"goButton.frame = CGRect~~~"

とか書くのダサいなと思っていながらも、良い書き方が分からないそんな貴方にこの記法。

これをInitialization Closureというらしいです。IBOutlet(Storyboard接続)の物にはdidSetで同様の記法をすることが出来ます。

Storyboardでチマチマ設定することは出来ますが、こちらで書けば一目瞭然!オススメです。

 

③MVVMができる

あんまり設計パターンの話をすると火傷しそうな気もするのですが、勇気を出して。

 

MVVMとはView、ViewModel、Modelの層に分けて実装を行う設計パターンの形です。

僕のゆるーい解釈でいくと、ViewModelがModel(内部データ)とView(画面描画)の受け渡しをしていまして、Modelが変わったら即座にViewModel君がView君に反映させるっていう、そういう感じです。(ググろう!)

サンプルコードがこちらです。

f:id:NNkamura_Enginieer:20191119025156p:plain

MidViewController

f:id:NNkamura_Enginieer:20191119025231p:plain

MidVIewModel

 

①midViewController.viewDidLoadでmidViewModel.dataBindingを呼び出します。

②midViewModel.didChangeにmidViewController.updateTable処理を代入します。

③midViewController.viewDidLoadでmidViewModel.tableDataの値を変更します。

④midViewModel.tableDataの値が変わった時、didSetに記載しているdidChangeが動きます。

⑤didChangeにはmidViewController.updateTableが代入されている(②)ため、midViewController.updateTableが動きます。

⑥midViewController.updateTable処理にて、本来は画面のテーブルを再度描画します。

 

といった流れです。

tableData(Model)の値が変わったら即座にViewModel君がView君に反映させているわけですね。

 

正直なところこの書き方が良い書き方なのか、メジャーな書き方なのかは分かりかねるのですが、こういう方法があるのかと初めて見た時に唸ったので書かせて頂きました。設計パターンについてはまだまだ勉強途中なので、自分の中でまた更新があったら当ブログにて報告させていただきます。

 

 

あとがき

えーなんとか、クロージャー編終わりました。

技術ブログは苦しいです。自分の中の出来てなさを人に見せる部分が多く、当初目論んでいた(高い)技術力のアウトプット戦略とは真逆の行動でした。

それでも自分に必要なネタをちゃんとやっていきたいので仕方ない。

これからもダサダサ技術ブログをよろしくお願いします。ツッコミ大歓迎です。

 

Swift勉強法について

ブログを始めたおかげか、先日勉強法についての質問をツイッターにて頂きました。

既にITエンジニアの方で、今回アプリエンジニアにジョブチェンジしたいので効果的な勉強法を伺いたいとのことです。質問をブログ記事にする許可を頂きましたので、私なりの回答をここで書かせていただきます。

 

※ 前提として、勉強法には好みや相性が大きいと思っています。自分に合う方法を探る参考程度にお読みください。

 

1.体系的にSwiftを学習したいとなったときに、おすすめのサイト・書籍はありますか?

 

質問2にて書きますが、実際に作るものの参考書として使うことが私は多いです。

DMの回答では私が持っている本や利用したサイトを紹介したのですが、実際に書店にいって選んだ方が良いかも知れません。

 

選ぶポイントについては

・自分で手を動かしやすいもの

・Swift4以降のもの

・軽く読んでみて読みやすいもの

・理解しにくい部分が分かりやすいもの(クラスとは、メソッドとは、Storyboardの使い方、AutoLayout、Delegateクロージャ

などを選ぶと良いと思います。

 

サイトは一応挙げるなら

Appleの公式とか

https://developer.apple.com/documentation/uikit/views_and_controls

日本語ならSwiftサラリーマンさんとかですかね。

http://swift-salaryman.com/

 

2.今になって思う、こうすれば良かったみたいな勉強方法はありますか?

 

実際に作ってみることが一番だと思います。作っていて分からないところというのは大抵仕事でもぶつかる課題なので、そこを解決することは業務にも役立ちます。

サイトや本はぶつかった時の参考書として、その部分を探して使うのが効果的だと感じています。

 

作る上でのコツは、ぶつかった問題点は後回しにして、とりあえず進めることです。

例えば「iPhone画面左上の”戻る”ボタンの文字を消したいけどできない」という課題ができたとしたら、それをメモなり、issueなりに書いておきます。

メモの書き方は「どうしたいか」「現状はどうなっているか」「何を試したか」「参考になりそうなサイトのリンクを貼る」など、次回の作業が捗る情報を書きます。スクリーンショットを貼れるとなお良いです。こうすることで

 

・とりあえず目標まで辿り着きやすくモチベが維持できる

・外だしした物が終わると達成感がある

・進捗の状況が掴みやすい

・人と仕事するときも、他のメンバーに任せやすくなる

といったメリットがあります。

 

それじゃ何を作るのが良いか?という問題なんですが、自分が使いたいアプリを作るとモチベが保ちやすくオススメです。

それがなければ世に出てる有名なアプリや、アップル純正アプリのUIを模倣するのが良いかと思います。

またAppStoreのリリース作業はなかなか面倒で、求人に「リリースまで行ったことがある」と書かれるケースもありますので、リリースまで行うと尚良いです。

最初の頃は業務面談などで、iOS経験年数で不安に思われることもあると思います。その時に「こんなの作れますよ!」と実際に見せるものがあると印象が変わります。

 

あと、分からないものはググる癖をつけること。

 

 

3.フォローしておくべき情報メディア等はありますか?

 

・いいなと思ったQiita記事を書いている人のツイッターを探してフォローする

いいQiita記事を書いている人のツイッターiOS関連の発言も多く、学びも多いです。

 

・QiitaのSwiftランキング

https://qiita.com/hikarut/items/6138e8e406da17f5b67c

沢山いいねがついている記事は今ホットな話題であったり、丁寧に書かれた記事だったりしますのでオススメです。

 

・GIZMODE

https://www.gizmodo.jp/tag/enterprise/apple/apple_product/ios/

「○○かも」なんて記事もありますけど、最新の話を読めたりもします。

 

・発表スライド集

https://qiita.com/applideveloper/items/996387a22e79e66bfe5b

初学者には少しハードルが高いかもしれませんが、普段聞けない情報が手に入ったりするのでためになります。