こんにちは。LINEアプリの公式アカウント開発を担当している諏訪と楊です。この記事では、LINE Appの開発を進める上でAndroidの開発者のリソース問題を解決するため、iOSエンジニアがAndroid開発を学習し、実際に開発を始めるまでの過程や学習内容、実務内容などを紹介します。
안녕하세요. LINE 앱의 공식 계정 개발을 담당하고 있는 스와와 양입니다. 이 글에서는 LINE 앱 개발을 진행하는 과정에서 Android 개발자 리소스 문제를 해결하기 위해 iOS 엔지니어가 Android 개발을 학습하고 실제로 개발을 시작하기까지의 과정과 학습 내용, 실무 내용을 소개합니다.
開発を始めるにあたって 개발을 시작하며

上記はLINEクライアントチームのAndroidエンジニアとiOSエンジニアの当時の人口比率です。
위는 LINE 클라이언트 팀의 Android 엔지니어와 iOS 엔지니어의 당시 인구 비율입니다.
LINEクライアントチームではiOSエンジニアと比べるとAndroidエンジニアが少なく、LINEクライアント開発者全体の開発リソース比率の懸念がある一方で、LINEアプリはiOS/Android同時に同様のスペックで開発を行うことが求められており、機能リリースをスムーズに進行するためにも、このギャップの改善が組織としての目標でもありました。この状況は、我々のチームでも同様に影響があり、偏ったリソース配分になっていました。
LINE 클라이언트 팀에서는 iOS 엔지니어에 비해 Android 엔지니어가 적어, LINE 클라이언트 개발자 전체의 개발 리소스 비율에 대한 우려가 있었습니다. 한편, LINE 앱은 iOS/Android에서 동시에 동일한 스펙으로 개발하는 것이 요구되고 있어, 기능 릴리스를 원활하게 진행하기 위해서도 이 격차를 개선하는 것이 조직의 목표이기도 했습니다. 이 상황은 우리 팀에서도 마찬가지로 영향을 미쳐, 편중된 리소스 배분이 이루어지고 있었습니다.
そこでiOSエンジニアの楊さんにAndroidの開発にチャレンジしてみないかという相談をし、話し合いののち開発を行うための準備を進めました。またLINE Appの中の機能には、さまざまな背景によりiOSとAndroidで細かい部分での処理の違いなど、把握が難しい差異なども存在するため、両方のコードを理解し観察することで、それらの問題の発見や改善につなげることも目的としています。
그래서 iOS 엔지니어인 양 씨에게 Android 개발에 도전해보지 않겠냐고 상담을 했고, 논의 후 개발을 위한 준비를 진행했습니다. 또한 LINE App 내 기능 중에는 다양한 배경으로 인해 iOS와 Android에서 세부적인 처리 차이 등 파악하기 어려운 차이점도 존재하기 때문에, 양쪽 코드를 이해하고 관찰함으로써 이러한 문제를 발견하고 개선하는 데에도 목적이 있습니다.
学習内容 학습 내용
基本方針について 기본 방침에 대하여
ここでは実際にAndroid開発を始めるにあたり、学習に用いたリソースについて紹介を行います。
여기에서는 실제로 Android 개발을 시작하면서 학습에 사용한 리소스에 대해 소개합니다.
基本方針ですが、まずLINE Appでは歴史的な経緯などにより、必ずしもすべての箇所で最新のArchitectureに準拠しているわけではなく、例えば当時は多くの場所でAndroid View(XMLによるUI構築)が利用されていました。そのため、この時点ではJetpack Compose関連は重要度低いと考え学習を後回しにしました。
기본 방침은, 우선 LINE App에서는 역사적인 경위 등으로 인해 반드시 모든 부분에서 최신 아키텍처를 준수하고 있지는 않으며, 예를 들어 당시에는 많은 곳에서 Android View(XML에 의한 UI 구성)가 사용되고 있었습니다. 따라서 이 시점에서는 Jetpack Compose 관련은 중요도가 낮다고 판단하여 학습을 뒤로 미뤘습니다.
また、ドキュメントについては、基本的にはGoogleの公式的なドキュメントを利用し、英語での利用を推奨しました。これは日本語などの翻訳言語では最新の情報が適用されないケースがあったためです。一方LINE Appプロダクト開発に関連するドキュメントは幸い社内Wikiが整備されているため、社内環境の開発方法や社内ライブラリの利用方法などはそちらを参考するようにしました。
또한, 문서에 대해서는 기본적으로 구글의 공식 문서를 이용하며, 영어로 이용할 것을 권장했습니다. 이는 일본어 등 번역 언어에서는 최신 정보가 적용되지 않는 경우가 있었기 때문입니다. 한편 LINE App 제품 개발과 관련된 문서는 다행히 사내 위키가 정비되어 있어, 사내 환경의 개발 방법이나 사내 라이브러리 이용 방법 등은 그쪽을 참고하도록 했습니다.
その他、iOSエンジニアが効率的に学習できる方法を優先するようにし、スムーズに業務に入れるような形を目指しました。下記は実際に当時利用した学習リソースです。ただし、現在はGoogleの提供するチュートリアルの内容は変更されていて、Jetpack Composeによる構成がメインとなっています。
그 밖에 iOS 엔지니어가 효율적으로 학습할 수 있는 방법을 우선시하여, 원활하게 업무에 들어갈 수 있는 형태를 목표로 했습니다. 아래는 실제로 당시 이용한 학습 리소스입니다. 다만 현재는 구글에서 제공하는 튜토리얼 내용이 변경되어 Jetpack Compose에 의한 구성이 메인이 되고 있습니다.
Jetpack Composeについては、現在は標準として推奨されている構成なので、基本的にはそのまま公式コースに沿って進めると良いと思います。一方、もしこれからAndroid Viewに関する学習が必要になる場合は、CodeLab(Google Developers Codelab)でAndroid用のXMLレイアウトに関する内容を検索して参考にすることができます。またViewModel、Repository、Coroutine、Lifecycleなどのビジネスロジック関連も、上記と同様に現在は標準コースから外されたため、必要に応じてCodeLabから検索可能です。
Jetpack Compose에 대해서는 현재 표준으로 권장되는 구성이라 기본적으로는 공식 코스에 따라 진행하는 것이 좋다고 생각합니다. 한편, 만약 앞으로 Android View에 관한 학습이 필요해질 경우에는 CodeLab(Google Developers Codelab)에서 Android용 XML 레이아웃에 관한 내용을 검색하여 참고할 수 있습니다. 또한 ViewModel, Repository, Coroutine, Lifecycle 등의 비즈니스 로직 관련도 위와 마찬가지로 현재는 표준 코스에서 제외되어 필요에 따라 CodeLab에서 검색 가능합니다.
Android関連のドキュメント Android 관련 문서
Android App tutorial Android 앱 튜토리얼
https://developer.android.com/codelabs/basic-android-kotlin-compose-first-app?hl=ja#7
Googleの提供するアプリ開発のチュートリアルです。上述の通り、現在のドキュメントではJetpack Composeによるレイアウトを紹介されていますが、まずはサンプルアプリを動かしてみつつ、実際のアプリがどのような構成で、どのように動いているのかを理解していくことを目指しました。ここでは下記のことを学びました。
Google에서 제공하는 앱 개발 튜토리얼입니다. 앞서 언급한 대로, 현재 문서에서는 Jetpack Compose를 이용한 레이아웃을 소개하고 있지만, 우선 샘플 앱을 실행해 보면서 실제 앱이 어떤 구성으로, 어떻게 동작하는지 이해하는 것을 목표로 했습니다. 여기서는 아래 내용을 배웠습니다.
- Android Studioのインストール Android Studio 설치
- Android StudioのUI基本説明 Android Studio의 UI 기본 설명
- Android View(XML)によるレイアウト
Android View(XML)에 의한 레이아웃 - 色の変更やinterfaceの追加 색 변경 및 인터페이스 추가
- Fragmentの遷移 Fragment 전환
Modern Android app architecture
현대적인 Android 앱 아키텍처
https://developer.android.com/courses/pathways/android-architecture?hl=en
次にAndroidの基礎的な構造を学ぶため、Androidの推奨するarchitectureやベストプラクティスを解説しているドキュメントを利用しました。ここではフェーズごとにUIやData layerなどを体系的に学びました。ドキュメントの中にはComposeを利用した部分もありましたが、データフロー部分など必要な箇所を優先して学ぶようにしました。ここで学習した内容は下記です。
다음으로 Android의 기본 구조를 배우기 위해, Android에서 권장하는 아키텍처와 베스트 프랙티스를 설명하는 문서를 활용했습니다. 여기서는 단계별로 UI나 데이터 레이어 등을 체계적으로 학습했습니다. 문서 중에는 Compose를 사용한 부분도 있었지만, 데이터 흐름 부분 등 필요한 부분을 우선적으로 학습하도록 했습니다. 여기서 학습한 내용은 다음과 같습니다.
- ViewModel
- Flow
- Coroutine lifecycle Coroutine 생명주기
基本的に画面構成は、iOSのパーツと似たようなところがあったため、iOSの経験を活かしながら異なる部分に注意しつつコースを進めました。またiOSにある機能で、ドキュメント中では紹介されなかったものについて使い方を調べたりしました。こちらについては後述します。
기본적으로 화면 구성은 iOS의 부품과 비슷한 부분이 있었기 때문에, iOS 경험을 살리면서도 다른 부분에 주의하며 과정을 진행했습니다. 또한 iOS에 있는 기능 중 문서에 소개되지 않은 것들의 사용법도 조사했습니다. 이에 대해서는 후술하겠습니다.
Sample app for architecture
아키텍처 샘플 앱
https://github.com/android/architecture-samples/tree/views
次に比較的コンパクトな構成で、XMLレイアウトによるAndroid architectureを適用したサンプルについて学習をしました。この構成は比較的実際のLINE Appのコードの構成と比較しても参考にできる部分は多いと考えたためです。
다음으로 비교적 컴팩트한 구성으로, XML 레이아웃을 이용한 Android 아키텍처를 적용한 샘플에 대해 학습했습니다. 이 구성은 실제 LINE App 코드 구성과 비교해도 참고할 만한 부분이 많다고 생각했기 때문입니다.
その他のAndroid関連の参考資料 기타 Android 관련 참고 자료
またQiitaやSlideShareなどの参考サイトでは既にiOS開発者に向けた両方のOSの比較解説や、Android言語で特有な処理などを解説したドキュメントが公開されており、これらのドキュメントについても参考にさせてもらいました。
또한 Qiita나 SlideShare 등의 참고 사이트에는 이미 iOS 개발자를 대상으로 한 두 OS의 비교 해설이나 Android 언어에서 특유한 처리 등을 설명한 문서가 공개되어 있어, 이러한 문서들도 참고하였습니다.
SwiftとKotlinはこんなに似てる!比較用チートシートを公開します
Swift와 Kotlin은 이렇게 닮았다! 비교용 치트시트를 공개합니다
https://qiita.com/tamappe/items/64027b87e6ee075e5f51
まさにこれからAndroid学習を行うiOSエンジニアにとって関心のある情報をまとめられている記事です。実際KotlinとSwiftについては類似した箇所も多く、リファレンスとして利用させてもらいました。
바로 지금부터 Android 학습을 시작하는 iOS 엔지니어에게 관심이 있을 만한 정보를 정리한 글입니다. 실제로 Kotlin과 Swift는 유사한 부분이 많아 참고 자료로 활용했습니다.
【!ってなんだ】KotlinとJava、nullとPlatformType【NullableにNotNull】
【!가 뭐지】Kotlin과 Java, null과 PlatformType【Nullable과 NotNull】
https://qiita.com/RyotaMurohoshi/items/5fcc10d04fecd7304556
歴史的な経緯などから、LINE Androidの中ではJavaとKotlinのコードが混在しています。現在はKotlin化も積極的に進められていますが、Javaに関する理解もある程度必要であり、特にnullに関しての取り扱い方はそれぞれで違う部分があり、気をつけなければならない部分の一つです。こちらの記事JavaとKotlinの相互運用におけるnullの取り扱いについての説明をされています。
역사적인 경위 등으로 인해 LINE Android 내에서는 Java와 Kotlin 코드가 혼재되어 있습니다. 현재는 Kotlin화도 적극적으로 진행되고 있지만, Java에 대한 이해도 어느 정도 필요하며, 특히 null 처리 방식이 각각 다르기 때문에 주의해야 할 부분 중 하나입니다. 이 글에서는 Java와 Kotlin의 상호 운용에서 null 처리에 대해 설명하고 있습니다.
実コードを利用したKotlinやAndroidに関する学習
실제 코드를 이용한 Kotlin 및 Android 학습
学習を行う上で、既存の社内のAndroidのソースコードは非常に良い参考資料になりました。最初の頃は、簡単な画面の実装を参照しながらサンプルコードの作成を進めました。
학습을 진행하는 데 있어 기존 사내 Android 소스 코드는 매우 좋은 참고 자료가 되었습니다. 처음에는 간단한 화면 구현을 참고하면서 샘플 코드를 작성해 나갔습니다.
Swift利用者の視点から見ると、Kotlinは親和性が高くそれほど戸惑うことはありませんでした。基本的にコースを進める中で、分からない書式に対し逐次調べることで、大体問題なく進められました。
Swift 이용자의 관점에서 보면, Kotlin은 친화성이 높아 크게 당황하지 않았습니다. 기본적으로 코스를 진행하면서 모르는 문법에 대해 그때그때 조사함으로써 대체로 문제없이 진행할 수 있었습니다.
開発メンバーからのサポート 개발 멤버로부터의 지원
定例Meeting, ペアプログラミング 정기 미팅, 페어 프로그래밍
実際にAndroidを学習する中で不明点などを解決するために、週に2回程度のMeetingを設けて進捗の確認や不明点の解決などを行うようにしました。またチームのAndroidエンジニアのTakasyさんにメンターのような役割を担ってもらい、Zoomの画面共有機能を利用しペアプログラミングの形で実際のコーディングを一緒に行ったりすることで学習のサポートを行いました。ペアプロを行う中で、相手の操作を見て質問することでAndroid Studioの操作などを学ぶことができたり、新しいIDEに不慣れな部分を改善していくことができました。
실제로 Android를 학습하는 과정에서 의문점 등을 해결하기 위해 주 2회 정도 미팅을 마련하여 진행 상황 확인과 의문점 해결 등을 하도록 했습니다. 또한 팀의 Android 엔지니어인 Takasy 씨가 멘토 역할을 맡아 Zoom의 화면 공유 기능을 이용해 페어 프로그래밍 형태로 실제 코딩을 함께 하면서 학습을 지원했습니다. 페어 프로그래밍을 하면서 상대방의 조작을 보며 질문함으로써 Android Studio 조작법을 배울 수 있었고, 새로운 IDE에 익숙하지 않은 부분을 개선해 나갈 수 있었습니다.
モブプログラミング 모브 프로그래밍
今回の取り組みである”iOSエンジニアがAndroidを始める”ことをきっかけに、部内でモブプログラミングを週1回の頻度で開始しました(詳細はTakasyさん執筆のブログを参照)。ペアプロよりもさらに参加者が多くなり、各メンバーの普段の仕事内容を見たり、IDEの使い方や便利なプラグインを共有してもらいました。学習者として、ドライバーをやることで多くの支援を受けることができ、最初は理解できない部分もあり少し苦労しましたが、最終的にはとても勉強になりました。
이번 시도인 'iOS 엔지니어가 Android를 시작하다'를 계기로, 부서 내에서 모브 프로그래밍을 주 1회 빈도로 시작했습니다(자세한 내용은 Takasy 님이 작성한 블로그를 참고하세요). 페어 프로그래밍보다 더 많은 참여자가 모였고, 각 멤버의 평소 업무 내용을 살펴보거나 IDE 사용법과 유용한 플러그인을 공유받았습니다. 학습자로서 드라이버 역할을 하면서 많은 지원을 받을 수 있었고, 처음에는 이해하기 어려운 부분도 있어 약간 고생했지만, 결국 매우 많은 공부가 되었습니다.
実務が始まってからは、プルリクエストのレビューや相談などもAndroidメンバーが行い、モブプログラミングを利用してコードの改善と提案したり学習ができるようにしました。
실무가 시작된 후에는, 풀 리퀘스트 리뷰나 상담 등도 Android 멤버가 담당하며, 모브 프로그래밍을 활용해 코드 개선과 제안을 하거나 학습할 수 있도록 했습니다.
社内版ChatGPT 사내 버전 ChatGPT
また不明点などは社内版のChatGPTを利用して解決を試みました。ここでサンプルコードを作成してもらったり、実現方法の提案を受けたりしました。また、LINEアプリ内のモダンな記述方法を確認するのにも非常に役立ちました。たまにハルシネーションが発生することもありましたが、確認しながら全体として初心者レベルの学習には全く問題なく利用することができました。
또한 모르는 점이 있을 때는 사내 버전의 ChatGPT를 이용해 해결을 시도했습니다. 여기서 샘플 코드를 작성해 주거나 구현 방법에 대한 제안을 받기도 했습니다. 또한 LINE 앱 내의 최신 작성 방식을 확인하는 데에도 매우 유용했습니다. 가끔 환각 현상(잘못된 정보 생성)이 발생하기도 했지만, 확인하면서 전반적으로 초보자 수준의 학습에는 전혀 문제없이 활용할 수 있었습니다.
実業務へのアサイン 실무 배정
次に実際に開始した業務についてを書きます。 다음으로 실제로 시작한 업무에 대해 적겠습니다.
社内向けライブラリのテストコード追加 사내용 라이브러리의 테스트 코드 추가
最初の仕事として、社内向けライブラリのテストカバレッジを上げるためにテストコードを追加しました。歴史的な経緯から、このライブラリはまだJavaで構成されている部分が多かったため、テストを追加すると同時に、元のJavaクラスをKotlinに変換する作業も進めました。Android StudioのKotlinへの変換機能を利用することで、概ね問題なく書き換えることができましたが、上述のようにKotlinからJavaの関数を呼び出す際に、nullに関する処理には注意が必要でした。
첫 번째 업무로, 사내용 라이브러리의 테스트 커버리지를 높이기 위해 테스트 코드를 추가했습니다. 역사적인 경위로 인해 이 라이브러리는 아직 Java로 구성된 부분이 많았기 때문에, 테스트를 추가하는 동시에 기존 Java 클래스를 Kotlin으로 변환하는 작업도 진행했습니다. Android Studio의 Kotlin 변환 기능을 이용하여 대체로 문제없이 변환할 수 있었지만, 앞서 언급한 것처럼 Kotlin에서 Java 함수를 호출할 때 null 처리에 주의가 필요했습니다.
OfficialAccountメッセージ処理のdebug機能追加
OfficialAccount 메시지 처리 디버그 기능 추가
こちらはLINEのOfficialAccountメッセージに関する内部的な処理についてのdebug機能です。もともとQAの確認のために用意したこの機能は、iOSでは既に存在していたものの、Androidにはまだ用意していなかったため、Androidをトライし始めたタイミングとしてちょうど良い機能というところもあり開発に臨みました。テストコードの作業では、学習コースで学んだArchitectureなどの内容をなかなか実践できなかったため、このdebug機能を通じてXMLベースの画面実装を実践できました。 またここで気づいたiOSとの違いもありました。iOSのようにコンパイル時に切り替える#if #endifのような機能がないため、通常はランタイム時に条件分岐でデバッグ機能などを組み込む必要がありましたが、Flavorごとに実現ロジックを変えることができるため、本番環境のバイナリに含まれないようにする方法をチームレビューを通じて理解することができました。
이것은 LINE의 OfficialAccount 메시지에 관한 내부 처리의 디버그 기능입니다. 원래 QA 확인을 위해 준비한 이 기능은 iOS에는 이미 존재했지만, Android에는 아직 준비되어 있지 않았기 때문에 Android를 시도하기 시작한 시점에 딱 맞는 기능이기도 해서 개발에 임했습니다. 테스트 코드 작업에서는 학습 코스에서 배운 Architecture 등의 내용을 좀처럼 실천할 수 없었기 때문에, 이 디버그 기능을 통해 XML 기반의 화면 구현을 실천할 수 있었습니다. 또한 여기서 iOS와의 차이점도 알게 되었습니다. iOS처럼 컴파일 시에 전환하는 #if #endif 같은 기능이 없기 때문에, 보통은 런타임 시에 조건 분기로 디버그 기능 등을 포함시켜야 했지만, Flavor별로 구현 로직을 바꿀 수 있기 때문에, 본番 환경의 바이너리에 포함되지 않도록 하는 방법을 팀 리뷰를 통해 이해할 수 있었습니다.
OfficialAccount向け新機能追加開発
OfficialAccount용 신규 기능 추가 개발
次は我々のメイン業務であるOfficialAccount向けの、機能のリリースにむけた開発です。
다음은 우리의 메인 업무인 OfficialAccount용 기능의 릴리스를 위한 개발입니다.
初めてAndroidメンバーとしてiOSメンバーと一緒に企画と打ち合わせをし開発を進めた案件となりました。iOSの実装を参照しながら開発を進めていたため、QA前の段階でiOSの実装とスペックが合わない部分に気づき、早期に対応することができました。このようにして初めてiOSとAndroidの両方を見ることができるメリットを実感できました。クライアント開発において、こういった両OSの挙動が異なることがあるため、今回のように実装する時点で気づくことができれば、このような不整合が少なくできそうです。
처음으로 Android 멤버로서 iOS 멤버와 함께 기획과 회의를 하며 개발을 진행한 프로젝트였습니다. iOS 구현을 참고하면서 개발을 진행했기 때문에, QA 전 단계에서 iOS 구현과 스펙이 맞지 않는 부분을 발견하여 조기에 대응할 수 있었습니다. 이렇게 해서 처음으로 iOS와 Android 양쪽을 볼 수 있는 장점을 실감할 수 있었습니다. 클라이언트 개발에서는 이렇게 두 OS의 동작이 다른 경우가 있기 때문에, 이번처럼 구현 시점에서 발견할 수 있다면 이런 불일치가 적어질 것 같습니다.
体験して気づいたAndroidとiOSの開発の違い
체험하며 깨달은 Android와 iOS 개발의 차이점
開発ツールの違い 개발 도구의 차이
Android StudioはIntelliJを基にしており、様々なモダンな機能が利用できるので、不便さはなく、Xcodeよりも使いやすいと感じました。XcodeとAndroid Studioの違いは調べれば多くのブログが見つかるので、ここでは個人的に良いところをまとめます。
Android Studio는 IntelliJ를 기반으로 하여 다양한 최신 기능을 사용할 수 있어 불편함이 없었고, Xcode보다 사용하기 쉽다고 느꼈습니다. Xcode와 Android Studio의 차이는 검색하면 많은 블로그를 찾을 수 있으니, 여기서는 개인적으로 좋은 점을 정리하겠습니다.
コードリファクタリング 코드 리팩토링
Renameは開発中に日常的に利用する機能で、Android Studioでは変数名を変更したら左側に関連するところを一括変更するボタンが表示され、押すと関わるところが全て変更されます。Xcodeも似たような機能がありますが、関連箇所を洗い出す際に場合によってはフリーズすることがありました。
Rename은 개발 중에 일상적으로 사용하는 기능으로, Android Studio에서는 변수명을 변경하면 왼쪽에 관련된 부분을 일괄 변경하는 버튼이 표시되고, 이를 누르면 관련된 모든 부분이 변경됩니다. Xcode도 비슷한 기능이 있지만, 관련 부분을 찾아낼 때 경우에 따라 프리즈가 발생하기도 했습니다.
プラグインが充実 플러그인이充実
IntelliJのプラグインが使えるので、拡張性が抜群で、開発スタイルに応じてプラグインを導入できます。
IntelliJ의 플러그인을 사용할 수 있어 확장성이 뛰어나며, 개발 스타일에 맞춰 플러그인을 도입할 수 있습니다.
検索 검색
クラスや構造体名、ファイル名による検索が可能です。Xcodeは基本的に全体検索しか利用しないので、これができるのは非常に便利でした。
클래스나 구조체명, 파일명으로 검색이 가능합니다. Xcode는 기본적으로 전체 검색만 사용하기 때문에, 이것이 가능하다는 점이 매우 편리했습니다.
Function検索 Function검색
Functionの呼び出し箇所を検索する際に素早く結果が表示され、テストでの利用箇所が色違いで表示されるため、ソースを確認する際に非常に便利です。
함수 호출 위치를 검색할 때 빠르게 결과가 표시되고, 테스트에서 사용된 위치가 색상으로 구분되어 표시되기 때문에 소스를 확인할 때 매우 편리합니다.
変数検索 변수 검색
変数の利用箇所の検索もよく利用される機能で、Android Studioでは変数に値を渡すか、変数の値を利用するかが検索時に異なるアイコンで表示され、検索結果からフィルターをかけることもできます。
변수 사용 위치 검색도 자주 사용되는 기능으로, Android Studio에서는 변수에 값을 전달하는지, 변수의 값을 사용하는지에 따라 검색 시 다른 아이콘으로 표시되며, 검색 결과에서 필터를 적용할 수도 있습니다.
デバッグツール 디버그 도구
値の観測などが非常に速く、特に大規模なプロジェクトではXcodeとは大きな差があります。
값 관찰 등이 매우 빠르며, 특히 대규모 프로젝트에서는 Xcode와 큰 차이가 있습니다.
UI構築ツール UI 구성 도구
主観的なものですが、XcodeのInterface Builderも悪くないですが、あまり構築コードを弄りたくない場合、Android Studioの方がコードが比較的分かりやすく、コンフリクトもしにくいと感じます。
주관적인 의견이지만, Xcode의 Interface Builder도 나쁘지 않지만, 코드를 많이 건드리고 싶지 않은 경우에는 Android Studio 쪽이 코드가 비교적 이해하기 쉽고, 충돌도 덜 발생하는 것 같습니다.
ファイル構成とディレクトリ構造 파일 구성과 디렉터리 구조
iOS
Xcodeでは、プロジェクトは通常、.xcodeprojファイルを中心に構成されています。ソースコード、リソース、設定ファイルは、グループとしてXcode内で管理され、実際のファイルシステムとは異なる場合があります。
Xcode에서는 프로젝트가 보통 .xcodeproj 파일을 중심으로 구성되어 있습니다. 소스 코드, 리소스, 설정 파일은 그룹으로 Xcode 내에서 관리되며, 실제 파일 시스템과는 다를 수 있습니다.
Android
Android Studioでは、プロジェクトはGradleを使用したディレクトリ構造で管理されており、.xcodeprojのような特定のプロジェクトファイルは必要ありません。各プロジェクトは複数のモジュールで構成され、各モジュールは独立したビルド設定を持っています。srcディレクトリ内にはmain、test、androidTestなどのフォルダがあり、コードとリソースが整理されています。この構造により、プロジェクトの柔軟性が高まり、異なるビルドバリアントやフレーバーの管理が容易になります。
Android Studio에서는 프로젝트가 Gradle을 사용한 디렉터리 구조로 관리되며, .xcodeproj 와 같은 특정 프로젝트 파일은 필요하지 않습니다. 각 프로젝트는 여러 모듈로 구성되며, 각 모듈은 독립적인 빌드 설정을 가지고 있습니다. src 디렉터리 내에는 main , test , androidTest 등의 폴더가 있어 코드와 리소스가 체계적으로 정리되어 있습니다. 이러한 구조 덕분에 프로젝트의 유연성이 높아지고, 다양한 빌드 변형과 플레버 관리가 용이해집니다.
実行モードとデバッグモード: 실행 모드와 디버그 모드:
iOS
Xcodeでは、基本的にビルドして実行する際にデバッグ情報が含まれますが、特定のデバッグモードを選択することは少ないです。デバッグは主にデバッガを通じて行われます。
Xcode에서는 기본적으로 빌드하고 실행할 때 디버그 정보가 포함되지만, 특정 디버그 모드를 선택하는 경우는 드뭅니다. 디버그는 주로 디버거를 통해 이루어집니다.
Android
Android Studioでは、アプリを実行する際に「Run」モードと「Debug」モードの2つがあります。「Run」モードはアプリを通常の方法で実行し、デバッグ情報を含みません。「Debug」モードは、デバッグ情報を含み、ブレークポイントの設定やステップ実行などのデバッグ操作を可能にします。この2つのモードの切り替えにより、開発者は効率的にアプリの動作を確認し、問題を特定できます。
Android Studio에서는 앱을 실행할 때 "Run" 모드와 "Debug" 모드 두 가지가 있습니다. "Run" 모드는 앱을 일반적인 방법으로 실행하며 디버그 정보를 포함하지 않습니다. "Debug" 모드는 디버그 정보를 포함하여 브레이크포인트 설정이나 스텝 실행 등의 디버그 작업이 가능합니다. 이 두 모드의 전환을 통해 개발자는 효율적으로 앱의 동작을 확인하고 문제를 파악할 수 있습니다.
ファイル並び順 파일 정렬 순서
Xcodeプロジェクト Xcode 프로젝트
Xcodeでは、プロジェクト内のファイルは通常、.xcodeprojファイルにより管理されます。Xcode内で表示されるファイルのグループは、実際のファイルシステムのディレクトリ構造と一致しないことがあります。ファイルは、ナビゲーションペインでグループとして整理され、開発者はプロジェクトの論理構造に基づいてこれらを組織します。
Xcode에서는 프로젝트 내의 파일이 보통 .xcodeproj 파일에 의해 관리됩니다. Xcode 내에서 표시되는 파일 그룹은 실제 파일 시스템의 디렉터리 구조와 일치하지 않을 수 있습니다. 파일은 내비게이션 창에서 그룹으로 정리되며, 개발자는 프로젝트의 논리적 구조에 따라 이를 조직합니다.
Android Studio
Project View 프로젝트 뷰
プロジェクトビューでは、ファイルとディレクトリが実際のファイルシステムの構造に基づいて表示されます。これは、ファイルの物理的な配置を確認したいときに便利です。
프로젝트 뷰에서는 파일과 디렉토리가 실제 파일 시스템의 구조를 기반으로 표시됩니다. 이는 파일의 물리적 배치를 확인하고 싶을 때 유용합니다.
Android View Android 뷰
Androidビューでは、プロジェクトが論理的に整理され、開発者が必要とするリソースやコードに簡単にアクセスできるようにします。たとえば、リソースファイルはresフォルダにまとめられ、Java/Kotlinコードはjavaフォルダに整理されます。このビューは、Android開発に特化した構造を提供し、リソースやコードを効率的に管理するのに役立ちます。
Android 뷰에서는 프로젝트가 논리적으로 정리되어 개발자가 필요한 리소스나 코드에 쉽게 접근할 수 있도록 합니다. 예를 들어, 리소스 파일은 res 폴더에 모여 있고, Java/Kotlin 코드는 java 폴더에 정리되어 있습니다. 이 뷰는 Android 개발에 특화된 구조를 제공하여 리소스와 코드를 효율적으로 관리하는 데 도움이 됩니다.
Xcodeとの対比 Xcode와의 대비
日常の開発によく使われる機能は以下の図の通りになります。同じ色で囲まれたのは同じ位置付けの機能になります。
일상적인 개발에서 자주 사용되는 기능은 아래 그림과 같습니다. 같은 색으로 둘러싸인 부분은 동일한 위치에 있는 기능입니다.


振り返り
上記のような流れで、最終的にAndroidの実業務を行うまで成長することができました。その後、我々の中でレトロスペクティブを実施し、ここまでの学習パスを通じて行って良かった点や改善点などを振り返りました。その内容をまとめます。
위와 같은 흐름으로, 최종적으로 Android의 실무를 수행할 수 있을 만큼 성장할 수 있었습니다. 그 후, 우리 내부에서 회고를 실시하여 지금까지의 학습 경로를 통해 잘했던 점과 개선할 점 등을 되돌아보았습니다. 그 내용을 정리합니다.
まず業務に関しては最初にdebug機能の実装を行った部分は、リリースに影響を与えない形で作業を行えたこと、またUIの実装を含めた一連のAndroid開発の流れを体験できた部分は良かったです。また、その中でZoomを活用したペアプロによって問題の解決や、ちょっとした疑問や問題の解決も行えてスムーズに開発を行うことができました。画面を共有して確認する中で、Android Studioのショートカット操作などにも触れ知見を広げることができたのも良かったです。他にも、モブプロやペアプロを行うことで、例外処理やbuild関連の部分など、学習パスから抜けていた部分などもサポートすることができました。
먼저 업무에 관해서는, 처음에 debug 기능 구현을 진행한 부분이 릴리즈에 영향을 주지 않는 형태로 작업할 수 있었던 점과, UI 구현을 포함한 일련의 Android 개발 흐름을 경험할 수 있었던 점이 좋았습니다. 또한 그 과정에서 Zoom을 활용한 페어 프로그래밍을 통해 문제 해결이나 작은 의문점, 문제들도 해결할 수 있어 원활하게 개발을 진행할 수 있었습니다. 화면을 공유하며 확인하는 과정에서 Android Studio의 단축키 조작 등에도 접할 수 있어 지식을 넓힐 수 있었던 점도 좋았습니다. 그 밖에도, 모브 프로그래밍이나 페어 프로그래밍을 통해 예외 처리나 빌드 관련 부분 등 학습 경로에서 빠져있던 부분들도 지원할 수 있었습니다.
一方で、今回の開発上では直接触れなかったもののDatabase処理などについても、今後利用する場合に学習が必要になりそうです。また、モブプロはこの時期ちょうど導入し始めたばかりだった事もあり、まだメンバー同士慣れていない部分もあり、意見がうまくまとまらないなどの問題もありました。この部分は慣れるまである程度のファシリテートが必要だったように思います。現在は、モブプロのメンバーとしてドライバーもナビゲーターも行うようになりました。
한편, 이번 개발에서는 직접 다루지 않았지만 Database 처리 등에 대해서도 앞으로 사용할 경우 학습이 필요할 것 같습니다. 또한, 모브 프로그래밍은 이 시기에 막 도입하기 시작한 터라 아직 멤버들끼리 익숙하지 않은 부분도 있어 의견이 잘 모아지지 않는 등의 문제도 있었습니다. 이 부분은 익숙해질 때까지 어느 정도의 퍼실리테이션이 필요했던 것 같습니다. 현재는 모브 프로그래밍 멤버로서 드라이버와 내비게이터 역할을 모두 수행하고 있습니다.
現在はiOSに再び軸足を置いていますが、同時にAndroidのレビューなども行っていただくなど、両方のOSを開発できるエンジニアとして活躍していただいています。
현재는 다시 iOS에 주력하고 있지만, 동시에 Android 리뷰 등도 맡아 양쪽 OS를 개발할 수 있는 엔지니어로서 활약하고 있습니다.


