1. Qiita FM-エンジニアのキャリアを深掘り-
  2. #35 ネイティブアプリ開発につ..
2024-12-17 23:20

#35 ネイティブアプリ開発についてWebアプリケーションエンジニアが聞いてみた【ゲスト:iOSアプリエンジニアでVim好きのウホーイさん】

spotify apple_podcasts

引き続きゲストはiOSアプリエンジニアでVim好きのウホーイさんです。



<トークテーマ>

・iOS開発を始めたきっかけ

・ネイティブアプリ開発の面白さ

・ネイティブアプリ開発特有の難しさ・観点

・ネイティブアプリ開発に興味がある人は何から始めると良い?


<ウホーイさんX(Twitter)ページ>

https://x.com/the_uhooi



<X(Twitter)ハッシュタグ>

#QiitaFM


<番組へのメッセージはこちらから>

https://forms.gle/K9HyUGy7phDBGpht7

See Privacy Policy at https://art19.com/privacy and California Privacy Notice at https://art19.com/privacy#do-not-sell-my-info.

サマリー

ウホーイさんが、iOSアプリ開発の魅力やネイティブアプリ開発の利点について、経験を交えて語ります。特にUI/UXやパフォーマンスの面で、ネイティブアプリがどのように優れているのかを探求し、クロスプラットフォーム開発との違いについても触れます。このエピソードでは、iOSアプリ開発におけるSwiftやSwiftUIの特性、またAndroidとの違いについて議論されます。特に、ネイティブアプリ開発におけるリーダビリティや宣言的な書き方の進化を通じて、開発の扱いやすさが向上していることが強調されています。また、iOSアプリ開発においてXcodeやVimの使い方、生成AIとの組み合わせについての議論も行われています。これからiOSアプリ開発を始める方へのアドバイスとしては、MacBookを用いたXcodeのインストールとSwiftUIの学習が推奨されています。

iOSアプリ開発の魅力
日本最大級のエンジニアコミュニティ Qiita プロダクトマネージャーの
キヨノとしふみです。この番組では 日本で活躍するエンジニアをゲスト
に迎え、キャリアやモチベーション の話を深掘りしながら、エンジニア
の皆さんに役立つ話題を発信して いきます。前回に引き続きゲスト
は、iOSアプリエンジニアでVim好き のウホーイさんです。よろしくお願いします。
よろしくお願いします。
ウホーイさんとお送りする2回目の テーマは、ネイティブアプリ開発
についてWebアプリケーションエンジニア が聞いてみた、です。今回ちょっと
長いですね。今回は、iOS開発、ネイティブ アプリ開発というところについて
いろいろお伺いをしていきたいな と思っています。改めてにはなって
しまうかもしれないんですが、iOS アプリ開発を始めたきっかけについて
改めてお伺いしてもよろしいですか
きっかけは、本当に仕事でたまたま やることになったという感じですね。
そこでハマってというところで、iOS 開発というところを始めたって
ことですね。最初に始めたときに 面白いなって思った理由ってどういう
ところなんですか。
面白いと思った理由。やっぱり スマホとかiPhoneとかiPadって結構
みんなが触るものだと思うんですけど、 それで自分が触っている端末で
アプリが動くっていうのが楽しかった ような感じです。ご威力なさすぎて
すみません。
ありがとうございます。前回のお話だと その前にデスクトップアプリ
ですかね。みたいなところを開発 したと思うんですけど、そのときの
体験とは違かったというような 感じなんですかね。
でもWindowsのデスクトップアプリ の開発も結構好きで、やっぱりUI
が伴っているものが好きっていう のがあるかもしれません。ただやっぱ
パソコンより小さいスマホのほうが 可愛くて楽しいなっていう感じ
です。
そうなんですね。ありがとうございます。 君は最初の頃に作っていたアプリ
ってどういうものなんですか。
まず2B向けの業務用システムっていう 感じですね。それをWindowsのデスクトップ
アプリで作っていて、それのiPad版 を約1年後に作ろうってなって、同じ
ようなシステムのアプリを作って たっていう感じです。
なるほど。当時そこをいわゆる ウェブではなくてネイティブアプリ
で作っていた理由って何かあるん ですか。
会社に言われたから作ってただけ ですね。
それ以降も通信向けのアプリ開発 とか、今もアプリ開発されている
ネイティブアプリ開発の特性
と思うんですけど、そういうところで 要件みたいなところもやっぱり
シンプルなウェブだけでは実現できない ようなものが多かったりするんですかね。
1社目はオンラインにつなげてはいけない っていうシステムだったので、
オフラインで閉じることが求められて いたので、それもあってデスクトップ
アプリとかになってましたね。
なるほど。通信をしないけどアプリ としてはうまく動かせる状態に
したいっていうパターンはネイティブ アプリ開発ってところは結構相性
良かったりするっていう感じですか。
そうですね。ウェブでもできるとは 思うんですけど、結構長くからVB
時代からあるヨームシステムだった ので、その流れでっていう感じですね。
なるほど。今のお話でちょっとネイティブ アプリ開発の特性みたいなところ
ちょっと軽くお話にもあったので、 もうちょっとそこをお伺いして
いきたいんですけど、ネイティブ アプリ開発っていうものが相性が
良いアプリケーションってどういう ものになるんですかね。
結構難しいと思うんですけど、やっぱり 誰もが毎日使うものだと思っているので
スマートフォンって。だからやっぱり 毎日使うようなアプリが基本的には
向いてるのかなとは思ってます。
なるほど。ちなみにウェブだと 実現できないものって先ほど通信が
伴わないっていうお話もあったと思 うんですけど、他にあったりするんですか。
よく言われているのはプッシュ通知 だとネイティブアプリがやりやすい
っていうのはありますが、最近だと 確かウェブアプリでもできるっていう
話もあったので、大きな優位性は そんなにないかもしれないですね。
そうなんですね。
それだけ聞いちゃうとシンプルに やっぱりURL叩くだけでアクセスできちゃう
ウェブアプリケーションのほうが便利 なんじゃないかって感じがしたんですけど
それでもやっぱりネイティブアプリ っていうものが開発され続けている
理由ってどういうところにあった りするんですかね。
自分は2つあると思っていて、1つが UI UXの面で、例えばiOSはAppleが提供
しているOSで、Swiftとかそのフレームワーク とかも全部Appleが提供しているもの
になるので、よりiPhoneに特化した UI UXを作れるとは思ってます。ネイティブ
のほうが。もう1個はパフォーマンス で、やっぱりウェブアプリってどうしても
ネットワーク通信とかによって パフォーマンスが左右されたり
すると思うんですけど、ネイティブ だと通信も当然走るんですけど
通信以外の部分も多くて、そこで パフォーマンスを最大限発揮できる
とは思ってます。
なるほど。シンプルにネットワーク みたいなところが1個特性にもなります
し、体験みたいなところもやっぱり ウェブだけだと実現できないような
ところが体験としたりとか、UI っていうところでもあったりする
ってことなんですね。
だとはい思ってます。
なるほど。逆にネイティブアプリ だとここら辺ってやっぱり実現
しづらいなとか、ここら辺はウェブ アプリのほうがいいなみたいに
思うところってどういうところ なんですかね。
基本的にはUI UXとかパフォーマンス の面ではないと思っているので、
多分あるとしたら開発効率なの かなとは思ってます。今だと主に
iOSとAndroid2つのスマホがあると思 うんですけど、ネイティブで開発
するとしたら両方のOSに対して 別々のコードで書くっていうのが
一般的なので、それに対してウェブ とかだと1つのコードでiOSとAndroid
に対応できますし、パソコンにも 対応できるので、そういった面が
起きるのかなとは思ってます。
なるほど。やっぱりそれぞれのOS だったりデバイスごとに開発を
していかないといけないってところ ですね。
はい。
なるほど。これは僕が本当に全然 そこら辺の開発を経験したことが
ないので、素人質問になっちゃう かもしれないんですけど、いわゆる
クロスプラットフォームみたいな それぞれの端末、1個のコードで
それぞれのOSとかデバイスで動く ようなアプリっていうのも開発
することができるじゃないですか、 多分。
はい。
僕もあんまりそこら辺詳しくは ないんですけど、そうではなくて
やっぱりSwiftだったりKotlinで、 それぞれのデバイスOSごとにアプリ
を作るってところはどういうメリット があったりするんですかね。
WebとNativeの違いとほぼ同じで、 やっぱりUI UXがどうしても他の
クロスプラットフォームのフレームワーク を使うと、使ってるなっていう
ような動きになったりとか、パフォーマンス とかもあったりするので、そういった
面でNativeのほうがSwiftとかKotlinの ほうが有利かなとは思ってます。
クロスプラットフォームとの比較
なるほど。じゃあそこら辺はやっぱり どうしてもクロスプラットフォーム
と言いつつも、実現できないところ とか作り込むってなると、それぞれ
の言語でしっかり作ったほうがいい ものができるっていうような感じ
なんですかね。
そうですね。逆に言えばそこまで UI UXとかこだわりがなくて、最低限
のパフォーマンスが出るっていう のであれば全然FlutterとかReact Native
とかでもいいかなとは思ってます。
ありがとうございます。なるほど。
And now, a short commercial break.
エンジニアの価値は世界が決める。
転職ドラフトは年収アップ率94%、 平均年収アップ額148万円と圧倒的な
実績を誇るITエンジニア限定の 転職サービスです。今までのエンジニア
経験を登録することで、厳選された 企業から年収提示付きのスカウトが
届き、リアルな市場価値が測れます。 気になる方は転職ドラフトで検索して
お気軽にご参加ください。
ちなみにUFO-Eさん、ずっとiOSアプリ の開発はされてると思うんですけど、
Androidアプリの開発はあまり興味 とかはないんですかね。
いや、めちゃくちゃ好きですね。
そうなんですか。そっちもされてるんですか。
ここ直近1、2年は全然やっていないんですけど、 前着でもちょっと書いていったり
レビューしたりとかありましたし、 個人でもコトリンでアプリ作って
Googleプレイストアに公開する っていうのもやってましたね。
そうなんですね。どちらもやられていたってことですね。
そうですね。
なるほど。これも完全に素人質問 になっちゃうかもしれないんですけど、
iOSとAndroidってOSが違うのはもちろん 知ってはいるんですけど、
アプリ開発の特性
アプリ開発という観点での違いって あんまり僕知らないなと思っていて、
それぞれのOSごと、ないし言語ごとでもいいんですけど、 特性みたいなのってあったりするんですか。
特性でいうと、これも強い人に 言われるかもしれないんですけど、
自分は結構似てるなって思っていて、
言語もSwiftとコトリンが割と似た 言語になってますし、
同じモバイルスマートフォンということで、
結構片方できればなんとなくで もう片方もできたりはするかもしれません。
そうなんですね。逆にここが違う みたいなのはあるんですか。
何がありますかね。なんだろう。
でもやっぱり言語とかIDEが違うので、 そこの違いになってくるのかなとは思ってます。
じゃあ割りかし片方での知見ってところは、 もう片方にも活かすことができるっていうのは。
結構活かせますね。
SwiftUIの進化
そうなんですね。
活かせるからこそFlutterとかMozambiqueとか あるのかなって思ってます。
今のお話聞いてて、やっぱりアプリ開発が 面白そうだなっていうのは思ったんですけど、
その一方で、これ僕だけが感じてる かもしれないんですけど、
ウェブアプリ開発よりもやっぱりちょっと とっつきにくさはあるなっていう感覚があって、
いわゆるネイティブアプリ開発って、
ウェブだったら割りかしサクッと コード書いてサクッと立ち上げて、
サーバーローカル立ち上げてサクッと 自分のブラウザで動作確認できて、
動いてるみたいなのが確認できる 気がするんですけど、
なかなかiOSとかAndroidアプリって、
そもそもビルドってどうやってやるの みたいなところから、
あんまり知らないことが多い気がしていて、
そこらへんって最初もし興味持って 何かやろうと思ったら、
どういうところから始めるといいみたいな アドバイスってあったりしますか。
それでいうとAndroidよりもiOSアプリ開発が 一番とっつきにくくて、
理由としてはMacBookを持ってないと開発できない というのが一番大きいかなと思ってます。
もしiPhoneのアプリの開発に興味がある方は、
まずMacBookを買ってもらうところから になるかなと思います。
逆にMacBookがあればすぐ開発自体は できるものなんですか。
すぐですね。XcodeというAppleが 提供しているIDがあるので、
それをApp Storeとかからインストールして、 ちょっとやればビルドできます。
そうなんですね。
これも僕が本当にただWebをずっとやってるから っていうだけの理由なんですけど、
多分スタイルの当て方とかもいわゆる単純な WebだったらHTML、CSSってところで、
いろいろ調べたらリファレンスが 出てくると思うんですけど、
そういうUIのコンポーネントみたいなところも 割り返し簡単に扱えたりするものなんですかね。
そうですね。今SwiftUIというとても 素晴らしいフレームワークがあるので、
それを使うと自分CSSとかのほうが すごい難しいと感じちゃいますね。
SwiftUIとかのほうがさっと作れると思ってます。
なるほど。SwiftUIって僕も何回か耳にしたことは あるんですけど、
あまりどういうものなのかっていうのを 理解していなくて。
もともとSwiftでの開発ってところがあって、
そこに対してSwiftUIっていう新しい 概念みたいなのが登場したみたいな感じなんですかね。
そうですね。もともとはUIキットという フレームワークが、もちろん今もあって、
バリバリ現役なんですけど、それしかなくて、 UIキットを使って、
Objective-CかSwiftのどちらかでそれを使って 書いていくっていうのが多かったですね。
SwiftUIはiOS13のときに出たので、 今から5年前ですね。
5年前に出てきて、宣言的に何か書ける フレームワークっていう売り出し方みたいな、
Flutterとかみたいなイメージで書ける感じです。
宣言的、ちなみにどういう感じの 違いがあるんですかね。書き方というか。
そうですね。UIキットだと 命令的に書く感じですかね。
あとデリゲートパターンとか いろんなパターンがあるんですけど、
ちょっと複雑になるのに対して、 SwiftUIだと、
自分、逆にWebが全然詳しくないんで 違うかもしれないんですけど、
リアクトとかが流行って、あれも宣言的って 確か呼ばれていたので、
そのような流れをリュークを組み取った 感じのフレームワークになるとは思います。
なるほど。じゃあ本当に今までは UIっていうところを本当に何て言うんですかね。
一行ごとにここにこれを表示、 ここでこれをここに表示みたいな、
命令的に書いていくのが割とUIキット。
対してSwiftUIは構造を書くみたいな。
なるほど。じゃあ元々は特定のこういう UIのこのコンポーネントに対して
こういう挙動をするみたいなのを 1個1個書いていたのが、
今はそれ自体を1個のコンポーネントとして 使い回すみたいなことができるようになったみたいな。
そうですね。HTMLを書くイメージかもしれません。
ああいう構造があって、 構造を書いていくっていう形ですね。
そうなんですね。そういう変化が Swiftの中でも起こっているってことなんですね。
なるほど。じゃあ今から本当に ネイティブアプリ開発を始めようと思ったら、
いわゆるSwiftUIみたいなところで 最初から作り始めちゃってOKみたいな感じですか。
私はそのほうがいいと思っています。
そうなんですね。
一度SwiftUI触ると、なかなか UIキットには戻れないかなと思っています。
アーキテクチャと勉強法
そうなんですね。ちなみにそこら辺も iOSは、Swiftはそういうアップデートがあったと思うんですけど、
Android側でも同じような アップデートってあったりするんですかね。
そうですね。Androidも元々は XMLでビジュアルを構築していたんですけど、
結構近い時期にJetpack Composeっていう フレームワークが出てきて、
それも宣言的に書けるっていう感じですね。
そうなんですね。じゃあそこら辺も結構似ているというか、
結構同じようなトレンドでアップデートが されていっているっていうような感じが。
そうですね。割と似てるかなとは思います。
なるほど。
最初にアプリ開発ってなったら、 とりあえず何かしら表示させるものとかは、
多分いろいろリファレンスを見たら できるんじゃないかなっていうのは思うんですけど、
実際そのアプリ開発のスキルを見つけたいなとか、
アプリ開発ってどういうものなのかっていうのを 理解したいってなった場合って、
どういう勉強から始めたほうが良さそうですか。
今だとAppleが公式でSwiftUIのチュートリアルを 公開しているので、
一旦はそれに沿ってやってみるのが いいかなとは思います。
そうなんですね。
UI、そこのチュートリアルってところをやれば、
大体Native App開発の雰囲気は把握できる っていうのは解説になります。
UIにまつわる部分は分かるかなと思います。
UI以外のところってどういうものがあるんですか?
ロジックとかアーキテクチャの部分になりますね。
なるほど。
そういうところは別途他のところで 勉強していかないといけないっていう。
そうですね。
それはAppleが公式であまり言ってないので、
結構独自で勉強する必要が出てきますね。
なるほど。
やっぱりIOSとかそういうところでも またアーキテクチャみたいなものは
別途いろいろ考え方みたいなのが あったりするっていうのは感じますかね。
そうですね。
やっぱりアーキテクチャがしっかりしてると 変更もしやすいですし、
実装するときにどこに何を書けばいいか っていうのが迷わずになったりするので、
ありますね。
なるほど。
そこら辺のアーキテクチャの手法みたいなの いろいろ種類があるっていうのは感じますかね。
そうですね。
いろいろありますね。
そうなんですね。
有名なところだとMVVMっていう、
ビューモデルみたいな感じで、
ビューとビューモデルを連携するみたいな、
そういうアーキテクチャがモバイルアプリだと 一番多いのかなとは思います。
なるほど。
基本的にそのアーキテクチャがメジャーではある っていうのは。
そうですね。
他に押さえておいた方がいいような考え方とか 概念みたいなのもあったりするんですか。
MVCとかMVPとか、
あの辺のWebとかでもよく使われるアーキテクチャ。
あとReduxとかその辺も結構モバイルアプリでも 使われていたりするので、
その辺まで勉強しておくとかなり役立つとは思います。
そうなんですね。なるほど。ありがとうございます。
iOS開発の世界、
Xコードを基本的にメインで使う感じだと思うので、
iOSアプリ開発の技術
なんかちょっと僕があんまり想像できないところも あるかもしれないんですけど、
その生成AIの登場によって開発体系みたいなのって 変わったりしてるんですか。
変わってるとは思いますが、
自分は業務で使ったことがないので なんとも言えないんですけど、
個人でGitHubコパイロットとか使ってて めちゃくちゃ快適だなとは思うので、
やっぱり効率は上がっていると思います。
なるほど。
Xコードで開発する場合もそういう 生成AIのツールって使うことってできるんですか。
それこそ本当につい最近GitHubが公式で、
Xコード向けのコパイロットのプラグインを提供したので、
ちょっと自分まだ触れていないんですけど、 もう早く触ろうかなとは思ってます。
そうなんですね。じゃあ今Xコードでも そういうGitHubコパイロットみたいなのは
使えるような環境になっている。 使えるはずですね。
そうなんですね。
ちなみにXコードも 全然使ったことがないのであれなんですけど、
いわゆるVimとかは結構カスタマイズできたりとか、
あとVS Codeとかも結構いろいろプラグインとかが あったりするじゃないですか。
Xコードの場合ってそういうカスタマイズって できたりするんですか。
本当に結構前はできたんですけど、 最近はあんまりできなくなっていて、
プラグインも結構制御されてはいるはずなので、 あんまりできないですね。
そうなんですね。じゃあ結構プレーンなXコードを 皆さん使ってらっしゃるって感じですか。
基本的にはそうで。
ただGitHub公式で出る前も非公式でコパイロット Xコードで使えるっていうのはあったので、
自分使ったことないんですけど、 それを使っている人は結構いますね。
そうなんですね。
ちなみにそこら辺のカスタマイズしたい みたいになった場合って、
やっぱりiOSとかを書いていてもVimとか 他のエディターを使ったりするんですかね。
Xコードがなんとなく肌に合わないな みたいになるシーンってないのかな。
でも人によってはあると思っていて、
多分人によってはコードを書くときはVimとか あとVSコードを使って、
デバッグとかしたいときにだけXコードを 開くって人も中にはいるかなとは思います。
でもやっぱりXコードをメインで使うって 方がやっぱりユースケースとしては
メジャーって感じなんですかね。
そうですね。やっぱりAppleが公式で 提供しているものであって、
VSコードとかLSP上のことをXコードが やってくれたりして、
保管とかもApple独自でかなりいい感じに 保管とか出してくれるので、
アプリ開発の始め方
基本的なXコードを使うのがいいかなとは 思います。
そうなんですね。
やっぱりそもそもiOSアプリ開発をする場合って、
Xコードのほうがコードがめちゃくちゃ書きやすい みたいな、そういう感じなんですかね。
公式が出しているので基本的にはそうですね。
そうなんですね。やっぱりカスタマイズとかが できなかったとしても、
Xコードのほうが書き味としては書きやすい。
そうですね。
Uforiさん、Vimとかも好きなわけじゃないですか。
VimみたいなキーバインドでXコードを操作する みたいなことってできるんですか。
3年くらい前からXコードにVimモードが 搭載されたので、一応最低限の動きはできます。
そうなんですね。
ただキーバインドもカスタマイズ 一切できないですし、
本県のVimにあるキーバインドも、
あんまり最低限のキーバインドしか 用意されていないので、
ちょっと使いづらさはありますね。
そうなんですね。
Uforiさんはそれで使いづらいな みたいに思ったりすることはないですか。
ありますけど、いじりでもちょっとVimモードを 使ってますね。
なるほど。
やっぱりそこら辺のアプリ開発特有の 独特の雰囲気みたいなのがやっぱり
何かあるんだろうなっていうのは 今お話聞いていても何か感じました。
最後にここまでで何となくiOSアプリ開発 ネイティブアプリ開発ってところで
いろいろお話してきたと思うんですけど、
最後にリスナーの方とかにもし、
今これからちょっとアプリ開発とか ネイティブアプリ開発とか試しに
始めてみようかなみたいに思う方に対して、
何かアドバイスとかあれば いただいてもいいですか。
アドバイスですか。
そうですね。
まずはiOSアプリ開発を始めるとしたら、
MacBookを買ってApp StoreからXコードを インストールしてやれば、
SwiftUIのチュートリアルをやれば、
iOSアプリ開発が何となくできるように なるので、それを私はお勧めします。
ありがとうございます。
とりあえずまずはやっぱりSwiftUI ってところを勉強して、
そこからそれぞれ作りたいものを また調べつつ作っていくっていうのが
よさそうというような感じですかね。
そうですね。
大井さん、今日はありがとうございました。
ありがとうございます。
まだまだお話ししたりないので、 次回も大井さんとお送りします。
今回はiOSアプリ開発、ネイティブ アプリ開発っていうところについて
いろいろお伺いをしてきました。
なかなか僕が普段、本当にウェブ の開発ばっかなので、
全然知らないことばっかりで、
なんかやっぱりXコードの皆さん どういうモチベーションで使ってるのかな
みたいなすごい気になっていたので、
そこらへんのお話とか聞けたのは すごく面白いなっていうふうに
感じました。
ありがとうございました。
さて、この番組では感想や次回 ゲストへの質問、
リクエストなどをお待ちしております。
番組詳細欄にあるリンクより お気軽にご投稿ください。
XではハッシュタグKiitaFMをつけて ポストしてください。
表記は番組名と一緒でQFMが大文字、 残りは小文字です。
そしてApple PodcastやSpotifyのPodcastでは レビューもできますので、
こちらにも感想を書いてもらえると嬉しいです。
Kiita株式会社はエンジニアを最高に 幸せにするというミッションのもと、
エンジニアに関する知識を記録、 共有するためのサービスKiita、
社内向け情報共有サービスKiitaチームを 運営しています。
ぜひカタカナでKiitaと検索して チェックしてみてください。
来週も火曜日の朝6時に 最新話が更新されます。
番組のフォローをして 最新話もお聞きください。
お相手はKiitaプロダクトマネジャーの 清野俊文と
iOSアプリエンジニアでVim付きの ウホイがお送りしました。
23:20

コメント

スクロール