ナカザンドットネット

Android Developer's memo

🍺 こしひかり越後ビール 🍺

Beer Advent Calendar 2021の5日目です。昨日はかんざむさんのバドワイザー メッシ缶でした。そういえばバドワイザーはなんだかんだで飲んだことないな……

adventar.org

今年は新潟らしいエチゴビールを飲むぞ

さて、今年はエチゴビールを飲もうと思います。日本第一号の地ビール醸造所であるエチゴビールについては2015年のアドベントカレンダーでお話ししたので、よろしければこちらもご覧ください。

blog.nkzn.net

新潟といえば米ですよね。エチゴビールにも、新潟らしさを出そうとしたのか、新潟米仕立てのビールがあります。それが、 こしひかり越後ビール です。

f:id:Nkzn:20211204233858j:plain
田植えのイラストに郷土愛を感じるこしひかり越後ビール

見た目には素直なピルスナーですが、原材料にはしっかりと「米」が明記されています。

f:id:Nkzn:20211204233959j:plain
原材料にはしっかりと米が明記されています

ただのスッキリ系かと思いきやどこかフルーティ

実はお米をビールに入れるというのは、喉越しのいいスッキリしたビールに仕上げる際には時々ある手法なようで、そこまで独自性があることではないようです。

となるとスッキリ系かなと思って飲んでみるのですが、これがどこかほっとするフルーティな味わいもあるのです。ある意味淡麗辛口の日本酒と近いかもしれません。

新潟こしひかりから生まれた、ほっとする味わいのこしひかり越後ビール、皆様もいかがでしょうか。

iOS版YouTubeアプリのOSSライセンスページが魔窟

気分転換で下調べも何もせずに雑に書いた記事です。個別のライブラリについては間違ったことを言っている部分が多いと思うので、参考にしないでください。


こんなツイートを見かけました。

Yogaといえば、FacebookMeta社が作ったAndroid / iOS向けのレイアウトエンジンです。

yogalayout.com

React Nativeのレイアウトエンジンでもありますが、まあ今回はReact Nativeの話はしません。YogaはAndroid向けのLithoやiOS向けのComponentKitといった形でも提供されており、ネイティブアプリのUI実装にも活用されている技術なので、YouTubeアプリで使われていることに大きな驚きはないのです。

……が、やはりGoogleで採用されるには珍しいライブラリであることも事実なので、これはもっと怪しいライブラリが隠れているな?という直感が働きました。結論からいうと実際にやばかったので、目についたライブラリを並べて行こうと思います。

Closure Library

まずはGoogle謹製JavaScriptフレームワークとして古株の Closure Library さん。

developers.google.com

……おかしい……初手からおかしい……お前はネイティブアプリではないのか……?

J2ObjC

続きまして、「AndroidとiOSの両方から使えるライブラリを作りたい」という夢を持ったことがある人なら誰もが知っている J2ObjC です。

developers.google.com

Java言語で書かれたコードをObjective-C言語に変換するやつです。いわゆるトランスパイルツールですね。

JavaScriptライブラリが出てきたあとだと、最終的にObjective-Cになる分だけまだ普通のツールに思えてきました。

JavaScriptCore

お次はSafari / WebKitのJavaScriptエンジンである JavaScriptCore です。

developer.apple.com

まあClosure Libraryがあるんだから、JavaScriptを動かせる何かが出てくるのはなんとなくわかってた。

iOS的にはほぼ標準ライブラリみたいなもんなんだから、特筆する必要はなかったと思うんだけど、なんで書いたんだろうなあ……

jquery2

JavaScriptライブラリ第2の刺客。言わずと知れた jQuery さんです。

jquery.com

今の最新はv3系だったと思うんですけど、わざわざ2って書いてあるのでv2なんですかね……

どこで使ってるんだろ……

LLVM

次はコンパイラ基盤の LLVM さん。

llvm.org

まあXcodeでビルドするときに使っているので、特に違和感はないのですが、他の異常さを際立たせるためにあえて置いておきます。

quickjs

さあ、今度は軽量JavaScriptエンジンの QuickJS だ!!!

bellard.org

JavaScriptエンジン2つ目いただきました〜〜〜〜〜〜〜〜〜!!!!!!!!!!!

なんで????????????????????

ES2020の仕様をほぼ網羅しつつも、ファイルサイズが小さく起動も高速という特長があるエンジンということで、そういうのが求められる場所に配置されたものと思われます。

V8

若き王者が帰ってきたッ

どこへ行っていたンだッ チャンピオンッッ

俺達は君を待っていたッッッ V8 の登場だ――――――――ッ

v8.dev

JavaScriptエンジン3つ目で〜〜〜す!!!いえ〜〜〜〜〜〜〜〜〜〜〜〜い!!!!!!!!!

いやあ……どこに使ってるんだろ……まじでわからん……JavaScriptCoreとQuickJSがあったら大体のパターンいけるやろ……ええ……?

まとめ

YouTubeアプリってガチガチのObjC/Swift製ネイティブアプリだと思ってたんですけど、JavaScriptエンジンを3つも積んでてjQueryやClosure Libraryまで登場するとなると、それなりのハイブリッドアプリなのかなあと認識を改めた次第であります。

j2ObjCは5年前にちょっと調べたことがあったので、今でも元気にしているのが見れてちょっと嬉しかったです。

おまけ:妄言

というかアレなんですよね、React Nativeも「Yoga + JavaScriptCore」がレンダリングエンジン+言語エンジンの構成なのを考えると、YouTubeアプリの中に「JavaScriptにビジネスロジックを書いてネイティブUIをレンダリングする」仕組みが作れそうな気がするんですよね。もしかしてどこかの画面はそういうフレームワークになっているのかなあ……

Aroundアップデート:September 2021 Editionまとめ

会社の開発チームで常時接続に使っているAroundの月次?アップデートが来ていたので、リリースノートを流し読みします。

new.around.co

iOSアプリがビデオ通話に対応

June 2021でリリースされたAndroid/iOSアプリでしたが、デスクトップアプリと同じルームへの参加はできるものの、ビデオ機能が開放されていませんでした。

今回のアップデートで、ひとまずiOSアプリでビデオ機能を利用できるようになります。移植が単純ではなさそうなフェイストラッキング機能もちゃんと実装してくれたようで、頭が下がります。

f:id:Nkzn:20210906104400p:plain
iPad版Aroundでカメラを有効にしてみた

Android版はcoming soonです(察し)。

画面共有のパフォーマンス改善

「めっちゃファンが回ってたし重かったのでフルスクラッチで書き直したやで」とのこと。わいわい。

画面共有中に配信者の画面内のAroundを「消さない」オプション

CPUリソース節約のためのもう一つのアプローチとして、画面共有中に配信者の画面内のAroundを 消さない オプションが追加されました。

f:id:Nkzn:20210906105053p:plain
配信者のaroundを消さないオプション

ぱっと見だとなんのことか分からない修正なので、例を挙げます。

実は今まで、配信者が画面共有している画面内にAroundのUIがあっても、視聴者には見えなくなっていました。

配信者 視聴者
f:id:Nkzn:20210906110819p:plain:w320 f:id:Nkzn:20210906110551p:plain:w320

ここで、今回追加されたオプションをオンにします。

f:id:Nkzn:20210906110956p:plain

すると、視聴者側にもAroundのUIが見えるようになります。

配信者 視聴者
f:id:Nkzn:20210906110819p:plain:w320 f:id:Nkzn:20210906110819p:plain:w320

標準の動作では、AroundのUIを配信対象から外すためにCPUリソースを消費していたようで、今回のオプションはその挙動をオフにする(=配信者の画面に見えているままの見た目で配信する)ことで、CPUリソースの節約を図る新機能ということになります。

今後の改善点

1.0以降、リソース節約と安定性、複数プラットフォーム展開にフォーカスして頑張っているそうです。短期的にはパフォーマンスや質の改善を中心に改善していくとのこと。嬉しい。

新規機能としては、ミーティングの録画機能を年内にリリースしたいとのことです。楽しみですね。

AroundのJune 2021 Editionが神アプデっぽい

TL;DR

Aroundチームは顧客の気持ちがわかっていて最高大好き

Aroundのアップデートが来ました

最近、会社のdevチームで、常時接続のコミュニケーションツールとしてAroundを利用しています。

around.co

Aroundはさまざまな工夫により、ZoomやMeetに比べると精神的なストレスが少ない作りになっており、常時接続してもストレスになりづらくなっています。次の記事が詳しいです。

japan.cnet.com

さて、そんなAroundですが、6/12に大きめのアップデートが来ました。

new.around.co

ざっくり眺めただけでも神アプデっぽさが出てたので、簡単に紹介します。

概要

  • モバイルアプリが出ました
  • Linuxアプリ(Beta)が出ました
  • Handoff機能の追加
    • ミーティングを始めたときのデバイスとは別のデバイスでシームレスにミーティングを継続できる
    • ある時間まではPCでミーティングして、その後営業のために離席して車で移動を始めたりしても、スマホでミーティングを継続できるということ
    • モバイルアプリが出てきたタイミングならではという感じの新機能で嬉しいですね
  • Voice Channels(音声のみの部屋)が作れるようになりました
  • Minimal Modeを使うとサムネイルのサイズを最小化して、できるだけ画面を隠さないようにできます
  • メニューがネイティブ実装になりました
  • フィルターをTouch Barで選択できるようになったよ(Macのみ)
  • Face Mask Modeをオンにすると、マスクをつけているときのくぐもった声がクリアに補正されるよ
    • 謎の技術じゃん
  • Add your team to multiple Rooms(まとめて招待)
    • 自分が入っているルーム一覧から任意の複数のルームを選んで、招待リンクを作成できます

動作するプラットフォームにAndroid、iOS、Linuxが追加されるというビッグニュースに加え、ミーティングに参加したままプラットフォーム間の切り替えができるHandoff機能が同時にリリースされたことで、より「常にAroundと繋がっている」が実現しやすくなりました。PCから離席してキッチンにコーヒーを淹れに行く間も、スマホで雑談の続きを聞き続けることができそうです。

今後追加される機能

  • Vertical floating mode(顔が縦に並ぶよ!)
    • ちょっと欲しかったやつ
  • Annotations(共有スクリーンにお絵描きできるよ!)
    • 完全に!!!!!!!!欲しいやつ!!!!!!!!!

Annotationsは早く来て欲しいですね。Slackの画面共有では画面上にマーカーが引けてめちゃくちゃ便利なのですが、おそらくそれに近いものになると思われます。仕事でモブプログラミングをしながら「ここ!ここです!ちくしょう、マーカーが引きたい!!!」みたいになってた*1ので、的確にペインポイントを押さえにきている印象です。

まとめ

Aroundチームは顧客のペインポイントをよく理解してる……しゅき……

*1: https://pop.com/home の利用を検討していました

OneMile Partnersに入社しました

2021年11月11日追記:株式会社モニクルに転籍しました。

monicle.co.jp

OneMile Partnersの親会社にあたる持ち株会社です。エンジニアリングやデザイン等、クリエイティブ系の部門はこちらに転籍となりました。

この記事を読んで筆者の仕事に興味を持ってくださった方は、モニクルの名前で検索してみてください。よろしくお願いします。We are hiring!

open.talentio.com


はい、というわけでですね、昨日の退職エントリに引き続きまして、入社エントリです。

といってもまだオンボーディングも終わっていない段階なので、業務内容について書くことは特にありません。簡単に会社紹介をしますね。

OneMile Partnersとmoneiro

この度、OneMile Partners(ワンマイルパートナーズ)という会社で働くことになりました。

onemile.co.jp

moneiro(マネイロ)というサービスを運営している会社です。

moneiro.jp

このmoneiroは「資産のセレクトショップ」という謳い文句で、働く世代の資産運用を手助けするサービスです。お金のプロがニーズに合わせて株式や保険などの金融商品をいい感じに組み合わせられるよう、相談に乗ってくれます。

難しいと思われがちな資産運用の敷居を可能な限り下げるためにかなり努力しているようで、グッドパッチさんの力を借りてガッツリとディスカッションをしながら、わかりやすい見せ方や導線について議論したそうです。

goodpatch.com

(ちょうど昨日リリースされた記事↑があるから出しとけって言われました)

なぜ入社したのか

「給料がよくなるから」というのはITエンジニアの転職においては珍しくもない理由なので、ここでは特に掘り下げません。

話だけでもということで事業説明を聞いてみると、「手に入るお金は増えてきたけど、このお金をどう運用したら家族を幸せにできるかわからなくて悩んでいる一家の大黒柱の30代」は、メインターゲットのひとつらしいことがわかりました。つまり私です。

日本人はお金に関するリテラシーが低い、という話はよく耳にしますし、自分もある程度お金の勉強をする中で「これはもっと早く知りたかったなあ」ということはたくさんありました。moneiroでお金のプロに相談することで、リテラシーの不足をある程度補えるようになるのであれば、これはかなり社会にとって良い影響があるはずです。

前職で農業生産者さんを相手にしていたときや、Androidの初心者本を書いているときにも意識していたのですが、私はリテラシーが不足している層に補助輪のように寄り添うサービスで社会貢献をするのが割と好きなようで、moneiroが良い感じに琴線に触れたのでした。

とはいえやはり、何より自分がターゲットユーザーであるというのは、事業を自分ごととして感じられる点で何より良いことだと思います。今までは本業と副業と子育ての合間の、あるかないかよくわからない余暇を使って家庭の資産運用について勉強していたわけですが、今後は仕事をしていれば事業のドメイン知識として資産運用を学ぶことができます。お得です。

というわけで、事業がなかなか好みなのでした。他にも、居住地を変えずに新潟からフルリモートしてよいことや、あれこれと(給与以外にも)良い条件が重なったことから、転職を決めています。

まとめ

というわけで、在宅勤務の会社から在宅勤務の会社に移るので、労働環境が何も代わり映えしない気がしますが、今日からワンマイルのなかざんとしてやっていきます。皆様よろしくお願いします。

2629日ぶりにナカザンドットネットがnkzn.netになりました

このブログは「ナカザンドットネット」という名前ですが、これまではnkzn.infoというドメインでした。

 

実は、7年前まではnkzn.netだったのです。

 

blog.nkzn.net

 

> どうも、nkzn.netの更新を忘れてて転売屋に取られた人です。

 

痛ましい事件でした……

 

かえってきたぞ!

 

このたび、nkzn.netを買い戻しました!

 

twitter.com

 

5月中はサボってしまったので、転職を機にブログのドメインをnkzn.netに戻しました。実に2629日(+α)ぶりです。この7年間で記事をたくさんシェアしてもらったので、nkzn.infoからも引き続き転送設定をしてあります。

 

これでようやく「どうしてナカザンドットネットなのにnkzn.netじゃないんですか?」と煽られなくて済む!やったぞ!

 

引き続き、ナカザンドットネットをよろしくおねがいします。

 

余談

 

https://www.nkzn.net にポートフォリオを置きました。よろしければご覧下さい。

退職します

f:id:Nkzn:20210531163000j:plain:w320

TL;DR

転職エントリです。

転職します

本日、現職の最終出社日でした。

2011年7月の創業から少し遅れて、2011年9月に3人目としてジョインした*1ところから数えて、10年近く在籍していました。

次の会社は決まっていまして、明日、6月1日から新しい会社での勤務になります。

友人から良いオファーをいただいたのがきっかけでの転職で、特に転職活動をしていたわけではなかったので、急な話になってしまい関係各所の皆様にはご迷惑をおかけしました。

新潟には残るの?

次の会社は東京に本社がありますが、私はフルリモートで新潟市の自宅から勤務します。

2018年に家を建てたばかりなので離れ難いという理由もありますが、単純に新潟市の環境が住みやすいので、このまま住み続けるつもりでいます。母校の会津大学からも近いですしね。

思い出

前述の通り、転職活動をしていたわけではないので、転職が決まった時点で履歴書も職務経歴書も作っていませんでした。

とはいえ良いタイミングではあるので、これまでの10年を振り返りがてら、職務経歴書を作ってみました。Next.jsとChakra UIとVercelの素振りも兼ねています。

https://www.nkzn.net/

ほとんど毎年、新しいプロダクトに関わっていたようです。

振り返ってみると「お客さんの話を聞いたり企画の概要を聞いてMVPを作ってみる」「MVPをリリースできるようにチームに作業を割り振る」みたいなことを多くやっていたような気がします。

タスクを割り振った後はチームメンバーにお任せなことも多かったので、僕個人の適性はいわゆる0→1よりももう少し小さい、0→0.5あたりにあるんだろうなあという肌感覚を持つようになりました。現実の課題をシステムで実装可能な粒度の課題に分割して、システム側の課題を主に扱う人たちの初速が出るようにするポジションです。0.5→1の間はスケジュールに入れ損ねた後出しのタスクを拾っていく、落穂拾いのようなことをやっていました。

僕が話をしてきたお客さんは、農業ICTのアーリーアダプターということで情報感度が高めだったりロジカルな思考を得意にするようなやり手の生産者さんが多く、興味深く仕様の議論を深めることができました。お客さんの業務フローを整理していく中で「自分たちでは気づいていなかったけど、そういう整理をするだけでも業務の勘所が分かりやすくなった。まだシステムを作る前に言うのもおかしいけど、相談してよかった」と言ってもらえたときにはかなり嬉しかったですが、そういう対話が成立するお客さんに出会えた私のほうこそ嬉しかったりしました。

Androidアプリエンジニアとして入社しましたが、人手不足だったこともあり、マネージャーとしてはサーバーやフロントエンドも含めた幅広い業務を扱わせてもらいました。おかげさまで、ツールが事業やチームにマッチするかどうかをよく考えるという、技術選択のキモでありつつも意外と経験しづらい視座を持つ機会を得られました。

blog.nkzn.info

メガベンチャーの友人たちを地方IT企業から眺めていたからこそ得られた視座だったことを考えると、人生は面白いですね。

次は何するの?

まだあまり人数が多くないベンチャーに行きます。フロントエンド中心になりそうですが、たぶん何でもやることになります。こういう感じは久々なので楽しみです。

ちなみに、近年はReact Nativeおじさんをやっていましたが、これまでの事業とこれまでのチームに合っていたからこその選択でした。次の会社でReact Nativeを選ぶかどうかはまた事業とチームを精査した上で考えることになります。

事業とチームにマッチした技術選択をやり続けるのは変わりません。粛々とやっていきます。

今後ともよろしくお願いします。

*1:微妙に創業メンバーと言いづらいのがちょっと困ってた