MIXIでインターンした話 in 2023

前年に続いて、今年の夏もMIXI社にてインターンさせていただきました。今回は競輪やオートレースへのインターネット投票を行うことのできるサービスであるTIPSTARのiOSアプリを開発するチームに関わらさせていただきました。 美味しいお肉 取り組んだこと インターンシップ期間中には色々なタスクに取り組みました。以下にいくつかをまとめました。 デッドコードの削除、コンポーネントの移動 TIPSTAR iOSアプリではデッドコードが多く残っていることが課題として認識されており、効率的にそれを削除することをタスクとして取り組みました。 デッドコードを検出するのにはPeripheryというツールを利用しました。このツールはビルドによって生成されるインデックスストアとASTを利用して、使用されていないコードを検出します。残念ながらコードの自動修正は行なってくれないので、そこは基本的に手動で消していく必要があります。シェルスクリプトなどで自動化にも挑戦しましたがあまりうまくいきませんでした。 また現状未使用だが将来的に使われる可能性のあるUIコンポーネントについては、UIコンポーネントを管理する専用のライブラリに移動する対応をとりました。 最終的に、1385個あった警告を146個にまで減らすことができました。 この作業は地道で作業する側もレビューする側も負荷が高く、この手の作業を継続的に行うことの重要性を感じました。 CIワークフローの改善 TIPSTAR iOSアプリのCIにはBitriseが利用されており、そのCIワークフローの改善、およびスピードアップに取り組みました。 BitriseのマシンにはiOS開発でよく利用される多くのツールが最初からインストールされており、同じツールをインストールしおなしている部分が多くありそれを修正するところから始めました。 次に、HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=TRUEを設定しました。これはすでにインストールされているHomebrewフォーミュラのアップデートの確認を行わなくするフラグでこれを設定することでBitrise上でHomebrewでインストールされているツールのアップデートが走らなくなり、大きな時間の節約になりました。 そして、LicensePlistをHomebrewのtap経由でインストールしないようにしました。LicensePlistはすでにHomebrew-core上で管理されており、そちらだとビルド済みバイナリをインストールできるため、若干の時間の節約になりました。 またその他の二重にインストールしていたツールを整理しました。 最後にいくつかのインストールをシェルスクリプト上で並列実行するようにし、時間の節約を図りました。 この変更を行う際にプリインストールツールを使うこと(アップデートを走らせないこと)の良し悪しを検討しましたが、以下の理由から問題ないと判断しました。 最新版の変化に追従できない可能性 比較的良い意味で枯れてきてるツールのため、そもそも最新版である必要性は低め 依存関係が解決できない可能性 Bitriseが提供してるスタックのマシンはすでに依存が解決されているはずなので問題になる可能性は低い ワークフローのポータビリティが下がる そもそもBitriseのyml形式で書いた時点でポータビリティは失われているのであまり関係ない 全体的にばらつきもありましたが体感として5分前後の時間の短縮を達成できました。 その他 その他いくつかの小さめなタスクに取り組みました。 SwiftLintルールの見直し SwiftLintワーニングの修正 Firebase Performanceの追加 UI改善チケット バグチケット インターン期間中楽しかったこと CTOオフィスアワー&1on1 MIXIにはCTOの吉野さんと社員の方々が自由にお話しできるCTOオフィスアワーというものがあるのですが、そこに他のインターン生と一緒に参加させていただきました。インターン生それぞれが興味のある技術の話題やMIXIについての質問をすることができとても楽しい時間になりました。 また1on1で吉野さんとお話しする機会も設けていただき、個人的にキャリアについてのお話しやMIXIについて伺うことができ、それもとても有意義な経験となりました。その中で、いかに自分のニッチを見つけて、その分野においてNo.1になることを目指すところから始めるべきというお話はとても印象に残っています。 社員さんとの交流 インターン期間中に、何度もランチなどで様々な部署の社員の方々と交流する機会を設けていただき、いろいろな事業のお話しを聞くことができてよかったです。

2023-12-23 · 1 分

SwiftでCatコマンドを作る

catコマンド catコマンドとは、与えられたファイルパスの中身を標準出力に書き込むコマンドです。今回はそれをSwiftで再現してみたいと思います。 The cat utility reads files sequentially, writing them to the standard output. The file operands are processed in command-line order. If file is a single dash (‘-’) or absent, cat reads from the standard input. If file is a UNIX domain socket, cat connects to it and then reads it until EOF. This complements the UNIX domain binding capability available in inetd(8). 今回は、一つのファイルを読んで出力するところまでを再現します。 Swiftからシステムコールを呼ぶ Swiftからreadやwriteなどのシステムコールを呼ぶために、今回はapple/swift-system: Low-level system calls and types for SwiftというApple製のSwift Packageを利用することにしました。 ...

2023-02-16 · 2 分

MIXIでインターンした話 in 2022

昨年に続いて株式会社MIXIにてDive into MIXIというインターンシップでMIXIのminimo事業部にてiOSエンジニアとしてインターンさせていただきました。 tl;dr みなさんも応募しましょう! 選考について 昨年お世話になった人事の方から今年の夏のインターンにお誘いいただき、自分としても昨年非常に良い経験ができたと感じていたので、今年も応募することにしました。昨年のプロセスと同様に、最初に人事の方との面接、その後エンジニアの方との面接を経て今年のインターンにも合格をいただきました。 待遇、環境、期間等 昨年と同様の待遇で、期間についても全面的にこちらの希望に沿った形にしていただきました。今年は日程のほとんどをオフィスでの勤務ができたので昨年より多くのコミュニケーションを取ることができたのはよかったかなと思いました。 インターン期間中に取り組んだこと メニュー新規作成時に、任意で画像を追加できるようにする 最初に取り組ませてもらったタスクは機能改善形のタスクでした。minimoでは美容師(やその他施術者)のユーザーがメニューを登録するステップがあるのですが、メニュー新規登録時に画像を追加する項目がないということが問題として挙げられておりそれの改善を行いました。この機能の経緯としては以前は必須項目としてあったが掲載のハードルを下げるために無くしたということでしたが、メニューに画像がある状態のほうがお客様は予約しやすいという判断がされてその修正を行いました。修正前では、画像を追加したい場合は、「新規作成」→「作成したメニューを編集」の手順を踏む必要があり、手間がかかるということを変更しました。 最終的におこなった変更自体はとても小さなものになりましたが、作業をする中でデザインファイルと実際の実装との差異を見つけたり、仕様の詳細について確認する必要があったりと、業務の進め方について学びが多いタスクになりました。 Swift Package Manager自動アップデートワークフロー作成 CocoaPods, RubyGemsでは同様の仕組みを運用していたので、Swift Package Managerで管理しているライブラリも同様の仕組みを利用していきたいという動機がありました。またライブラリの管理をSwift Package Managerにできるだけ移行していきたいこともあり将来的には必要になることがわかっていました。 この仕組みを実現する上でXcode内蔵SPMを利用しなければいけないことがトリッキーでしたがxcodebuild -resolvePackageDependenciesをうまく利用することで想定していた動作を実現することができました。最終的にfastlaneのカスタムlaneをBiriseから定期実行して利用します。 SwiftLintルールの改善 minimoではコード品質の維持のためにSwiftLintを利用していました。そこで新たに役にたつと思われるルールを追加しました。追加したのは以下のルールです。 explicit_init trailing_closure redundant_nil_coalescing cyclomatic_complexity(ignores_case_statements = true) xct_specific_matcher SwiftLintの自動フォーマット機能を利用することで比較的簡単にルールを適用することができました。またこれらのタスクを通してSwiftLintへのコントリビューションをすることもでき、面白い経験ができたタスクとなりました。 ビルド時間計測システム構築 iOSアプリのビルド時間を継続的に監視する仕組みの構築を行いました。ビルド時間の増大は開発者の体験を損ねる要素の一つであり、ビルド時間に影響を与えうる変更をいくつか自分で行なっていたこともあり、継続的に計測する仕組みを用意することには意味があると考えてこのタスクに取り組まさせていただきました。簡単に仕組みを説明するとBitriseのワークフローの定期実行機能により、GitHub上にあるコードに対してfastlaneの独自laneを実行します。そのlaneの中ではhyperfineというコマンドを使いxcodebuildがアプリをビルドするのにかかる時間を計測します。そしてその結果をJSONにエクスポートしAWS S3のバケットに保存します。S3に保存されたJSONはrundeckという別のサービスを経由してBigQueryに送られます。最終的にLookerというツールを利用しビジュアライズしました。 このタスクでは、今まで自分が利用したことのない技術を扱うことができ、とても勉強になりました。また多くの社員の方に助けていただき、いろいろな方とコミュニケーションを取りながら進められたのでよかったです。 リファクタリング コンパイル時間が長いところのリファクタ 複数の変数に分ける 型情報の追加 マジックナンバーの定数化 ローカルでは.swiftファイルが変更された時のみSwiftLintを実行 Build Phase Script内で.swiftのファイルの変更時のみ SwiftLintを実行するように変更 感想 今回のインターンでは開発環境の改善に関連したタスクを色々とやることができ新しい経験を得ることができてとても面白かったです。一年ぶりにコードベースを見返すと違った視点で見れることも多く、それもまた面白い経験でした。また去年インターンさせていただいた時よりも多くの方々とコミュニケーションを取ることができたと思うのでよかったです。

2023-01-20 · 1 分

ミクシィでインターンした話

2021年の8/16から9/10までDive into mixi GROUPというインターンシップでmixiグループのminimo事業部にてiOSエンジニアとしてインターンした記録です。 ミクシィのオフィスから見えるG社 tl;dr ミクシィは最高なので全員応募しましょう! 選考 2021年の夏にインターンする先をさがしていたところ、ミクシィのインターンの募集を見つけて応募しました。 書類選考通過の連絡が来て一安心した後、面接の連絡が来ました。今回のインターンシップでは人事の方との面接、社員の方との技術面接、配属候補の組織の方との面接のプロセスがありました。 技術面接までは問題なく進んだのですが、最後の配属先候補の方との面接ではあまり候補の組織とのマッチがないので不合格ということになってしまいました。 ただその後で、技術面接をしていただいた社員の方が所属していたminimoで再面接していただけることになりました。そしてminimoのエンジニアの方との面接ののち、無事に合格をいただき、minimoでのインターンが決定しました。 最初に落ちた時は割と凹みましたが、結果的に自分とあった組織でインターンすることができよかったなとも思います。またインターンとはいえ配属先候補とのマッチをしっかり選考過程で考慮されるのは、お互いの時間を最大限有効に使うという意味でとても良いなと思いました。 環境・待遇 【期間】 2週間以上から応相談 ※ サービスによって異なりますので、面接時に確認させていただきます ※ 開始日は、毎月1日か16日のいずれかになります 【勤務時間】 10:00~19:00(休憩1時間) 【時給】 時給 2,500円 引用元 時給に関して 大学生が応募でき、エンジニア内での職種の制限がないインターンシップの中ではかなり高い方なのではないかなと思います。 インターンシップの期間に関して 自分の都合に完全にあわせていただきました。一つ注意しなければいけないのは入社日が毎月1日か16日だという点です。終わりの時期がずらせない場合は面接の時期によっては二週間近くインターン開始できないまますぎてしまう可能性もあるので、なるべく早く応募して選考プロセスを開始するのがいいと思います。 リモートワーク 今回のインターンシップ中は基本的にリモートで業務を行いました。渋谷スクランブルスクエアのオフィスに行く機会が少なかったのは残念でしたが、それでも綺麗なオフィスに何度か行くことができよかったです。ミクシィでは事業部ごとにリモートワークの方針を決めており、minimoでは週一出社が推奨されていたので僕もそれにしたがい基本的に週一でオフィスに出社していました。他の事業部のインターンの方はまた別のルールで出社していたりと柔軟に対応されている印象でした。 インターン期間中に驚いたこと 研修 入社手続きが済んだ後に、オンラインでのハラスメント、コンプライアンス等に関しての研修がありました。その量が意外と多くて個人的に驚いたことを覚えています。研修項目が多いというのは必ずしも良いこととは限りませんが、僕はミクシィという会社が持つ価値観を知ることができる良い機会だったなと思います。 エンジニア以外の各チームについての紹介ミーティング minimoのチームにジョインした後でまずエンジニアを束ねる立場の方との1on1があり、minimoのエンジニア組織についての説明を受けました。ここまでは自分の予想の範囲内でしたが、その後でエンジニアリングとは関係ない他のチームについて各組織のリーダーの方達から一対一で説明を受けました。インターンに対してここまで時間を割いているのがすごく意外でしたが、それによりminimoという事業やチームについて深く理解することができ、インターンの経験がより良いものになったなと思います。 インターン期間中に取り組んだこと 二つのタスクをメンターの方々と一緒に進め、それと同時にiOSアプリのコードベースのリファクタリングを行いました。 タスク①:誤ったログアウトを防止する 前提 minimoのiOSアプリはAppleの審査の都合上、実際の登録プロセスを経ずに「ログアウト」する動線が存在していました。 課題 「ログアウト」と名乗っているがアカウントを他のSNSアカウント、メールアドレス等に連携していない時は実質アカウント削除と同等の処理になっていました。 アカウント未連携だと、ここでログアウトしてしまうと、ポイントなどが失われてしまう状況。 この事象に伴うサポートも一定数発生していた。 古いデザインのリプレイスが途中までになっていた。 行った改善 「ログアウト」を押すとアラートが出るように変更し、同時にアカウント連携を促すように変更。 ログアウトを押した時も、再確認をするようにアラートを追加。 Google Analyticsとの連携を実装。 アカウント管理画面のデザインを新規のものにリプレイス。 タスク②:予約詳細画面の一部ユーザビリティ改善 課題 予約詳細画面のユーザビリティにiOSとAndroidに差異がある。 予約後、サロンへのアクセスを調べる方法が不足している。 行った改善 予約詳細画面に直接、地図アプリを開く動線を追加で実装。 リファクタリング first(where: ... )を使うように変更 minimoのiOSアプリのコードベースの中には 1 .filter { ... }.first を利用している部分がいくつかありました。これは不必要に配列の全要素をループで見に行くことになるので、常に最悪ケースの時間がかかることになります。これを ...

2021-12-17 · 1 分

try!Swift Tokyoに学生枠で参加した話

何周遅れかわかりませんが自分の記録も兼ねて残して置こうと思います。 今回、私はtry!Swift Tokyoに学生枠を利用して参加させてもらいました。$350の参加費が$50になるので、学生の自分にとってはかなり助かりました! 公式Flickerも公開されたのでそれを見つつ、自分の記憶に残った発表をメモしていきたいと思います。 全ての発表が発表が素晴らしかったんですが、その中でも自分の興味のある分野のものなど5つを選んで軽くまとめてみました。 native macOS application、またはAppKitの世界 こちらの発表はmacOSアプリケーションについてでした。自分はSwiftを割と長い期間使ってますが、全くといっていいほどmacOSアプリケーションについては知識がなかったので以前から楽しみにしていました。最終的にアプリケーションデザインに関する自分が知らなかった事を色々しれてすごくよかったです。macOSが題材でしたが、iOSにも通じるものも多くありすごく勉強になりました。あとはスライドのデザインがとても綺麗でした。 ARKitのアプリを作ろう こちらはARKitについてのとても実践的な発表でした。発表をされていたNamrataさんはARKitについての本も執筆されたそうです。自分は常にARKitで何かしたいと思っていたのでとても参考になりました。 Swiftでソーシャルネットワークをつくろう こちらの発表はServer Side Swiftに関する発表でした。前半はSSSの現状に関する発表でした。様々な開発の状況や、SSSを利用してるプロダクトや企業の紹介などでした。後半はSSSを利用してSNSを作るというデモの発表でした。こちらは発表者の方が執筆されたServer Side Swiftについての本の中のデモでもあるそうです。 賢者のString こちらはSwiftのStringに関する発表でした。Appleに勤めている方が発表されていた事もあっても注目度が高かったように思います。発表はString型の仕組みに関するもので正直ちゃんと理解できているわけではないのですが、プログラミング言語としてのSwiftをもっと深く学びたいと思わせてくれる発表だったと思います。また個人的にスピーカーの方と直接はなすことができたのが、なかなかできる事ではないと思うので、とてもよかったと思います。 文字起こし 次へつなごう— Extending a hand to the next generation of Apple developers コーディングを学ぶには絶好のタイミング!技術は日進月歩、進化を遂げています。Apple Platformでの開発はSwiftやSwift playgroundにおける進歩によって、より簡単に取り組めるようになりました。しかし、この業界では、ソフトウェアエンジニアになろうとしている人と、エンジニアリングの役割を果たそうとしているテック企業の採用要求にはまだギャップが存在します。このトークでは、ソフトウェアエンジニアの人口統計からよく見落とされがちなポイントに焦点を当てます。これからソフトウェアエンジニアになろうとしている人々にどのように手を差し伸べられるのかを議論し、私たちソフトウェアエンジニアがApple開発者コミュニティをどのように成長させられるのかについてお話しします。ソフトウェアエンジニアではない人が壁を乗り越えることの難しさや、SwiftとこのApple開発者コミュニティが提供できるものとは何なのかについてもお話します。引用元 こちらの発表はテック業界における様々なギャップについてでした。プログラミングを学ぶものとして、この発表を聞いていて、いろいろ思う事がありました。とりあえずこの業界がよりダイバーシティのあるものになると良いなと思います。 文字起こし 感想 初めてのカンファレンス参加でしたがとてもいい経験になりました。機会があればまた参加したいです。東京以外でもやっているので、いつかは挑戦してみたいです。 参考資料 try! Swift Tokyo 2019 資料まとめ

2019-04-14 · 1 分