Takuji->find;

Sansan株式会社でAndroidのテックリードをやってます、技術的な記事を書いているつもり

Sansan株式会社に入社しました

退職エントリーで予告していた通り、2024/04/01付けでSansan株式会社に入社しました。今日から1週間表参道本社で研修ののち、関西支社配属となる予定です。

なぜSansanなのか

昨年夏頃から転職活動を始めて

  • 今後のキャリアとして自分の持っている技術力や設計力を活かしていけるロールがある
  • カンファレンス(主にDroidKaigi)にスポンサーブース出している
  • しばらくはAndroid専任でやれそう
  • 受託開発やってない
  • リモートメイン(出社週1以下)
  • 月額ベースの年収が+100万以上
  • 知ってる人(過去に一緒に働いたことがある、あるいはカンファレンスで幾度となく会っていてある程度人柄が分かる)がいる
  • 成長している企業

等条件を色々考えていたところDroidKaigi 2023でid:furusinに「Eightのテックリード探してるんですけどどうですか?」とお声掛けいただき、他にも数社お声掛けいただいた中から

  • Sansanでのテックリードの役割が自分がやりたいことにマッチしている
  • 成長しているプロダクトが多い
  • 選考でお会いした人が皆さん良かった
  • SansanやBillOneははてなでも採用されていた
  • Eightは自分や周りの人が使っている

といった理由からSansanを選ぶことにしました。

何をするのか

しばらくはAndroidアプリエンジニアとして活動し、ある程度会社に馴染んできた頃にEightのAndroidテックリードとして働く予定です。

個人的な目標としては

といったことを考えています

いつもの

www.amazon.jp

最後に

会社員15年目に突入する今日から突然1000人オーバーの会社に8年ぶりの転職ということで、色々不安もあったりしますが新しい環境でがんばっていきます。

株式会社はてなを退職します

2024/3/31をもって8年間在籍した株式会社はてなを退職することになりました。本日2024/2/14が最終出社日でした。

はてなでやってきたこと

カクヨムアプリ Android

2016/1/1 に入社して最初にやったことはカクヨム(現カクヨムViewer) Android版のリリースです。

play.google.com

当時Android界隈はRxJava全盛期という感じではてなではまずRxJava浸透させるぞ〜って感じで導入していきました。

またLGTM Cameraをリリースしたのもこの頃です。

lgtm.hatelabo.jp

カクヨム Web

2016年末〜2017年頭辺りまではカクヨムのWebチームに異動して、PerlやTypeScriptを書いたりしていました。

kakuyomu.jp

当時Web小説界隈といえば小説家になろう、みたいな風潮がありましたが今やカクヨムも大きなサービスとなっていて書籍化、コミカライズ、アニメ化作品なんかも結構出ていて感慨深いですね。

はてなブックマーク

2017年の春頃に今度ははてなブックマークのアプリチームに異動して、ブックマークのAndroidアプリ版をリノベーションしました。

リノベに関しては昔ブログに書きました。

developer.hatenastaff.com

ジャンプルーキー!アプリ

2017年末〜2018年はジャンプルーキー!アプリの開発をやっていました。

play.google.com

このアプリではアプリチームメンバーの1人目としてテックリードを任され

  • Webチームのメンバーと協力してAPIの仕様策定
  • デザイナーと協力してUIの細かい部分を煮詰める
  • タスク管理、進行管理
  • ライブラリー、アーキテクチャ等の技術的な意思決定

をやったりしていました。

当時のはてなアプリ開発としては各プラットフォーム3名ずつと比較的大きなプロジェクトでしたが、無事予定通りリリースすることができました。

これ以降はほぼずっとマンガのアプリに関わっていくことになります。

カクヨムViewer React Native化

ジャンプルーキー!アプリを完成させた後少しして、今度はカクヨムViewerのReact Native化を行いました。

こちらはDroidKaigiで発表してます、たぶんまだアーカイブ残ってるはずなのでそちらで。

developer.hatenastaff.com

コミックDAYS Android

コミックDAYSのAndroid版は現在はてなでメンテナンスや機能開発を行っています。

play.google.com

このアプリでは機能開発以外に

  • 設計のモダン化
  • ViewModel化
  • 画面回転対応
  • Dark Theme対応(一部)
  • ActivityのFragment化
  • RxJavaのKotlin Coroutinesへの置き換え
  • Compose化(一部)

などの近代化っぽいことを色々やりました。

機能開発だと直近ではコメント機能の開発なんかもやりました。

コミックガルド+ (GigaViewer for Apps) Android

はてなではGigaViewer for Apps第一弾としてオーバーラップ・プラスさんのコミックガルド+をリリースしています。

play.google.com

GigaViewer for Appsはざっくり言うとマルチテナントなマンガアプリとしてロジックやUIをある程度共通化して低コストで色んな出版社さんにアプリを出してもらうみたいなコンセプトのものなのですが、こちらのアプリにも最初から最終出社直前まで関わりました。

  • マルチテナントなアプリの全体設計
  • PluggableにUIや機能、ロジックを追加する仕組みの検討
  • Android版のアプリ設計
  • ビューワー部分の開発
  • フルComposeでやっていく決定、情報収集等

といった設計から難しい部分の実装等色々やりました。 PluggableにUIや機能を追加する仕組みはKSPを使ってコード生成していて、そこで得た知見はKotlinFest 2022で発表しています。

www.youtube.com

なんでやめるのか

在籍5年経ったあたりから少しずつ転職を考え始めていましたが、今後のキャリアプランに関して決めきれずにずっと悩んでいました。

ですが、その中でやはり自分は技術が好きなので技術屋として働き続けたくて、自分の持ってる技術をチームに広げたり技術的な意思決定に責任を持つような仕事をしたいと思うようになりました。

また、これまでは比較的趣味や娯楽のアプリに関わることが多かったが、ビジネスや生活に密着したアプリに関わっていきたいと思うことが増えてきたり、自社開発そろそろやりたいな〜と思っていたところDroidKaigi 2023で知り合いからうちどうですか?と色々お声掛けいただいたり、Findyでテックリードどうですか?ってスカウトいただいたりして色々話を聞いてるうちに転職することにしました。

今後

次の会社ではAndroidアプリのテックリードをやる予定です。本社は東京ですが、引き続き関西にいます。

また4月1日に改めて入社エントリーで報告させていただきます。

最後に

今までの会社は長くても2年程度の在籍でコロコロ転職していたのですが、はてなには気が付けば8年いていつの間にか自分より前に入社した人の1.5倍くらい後に入社した人がいる、みたいな感じになっていました。

自分のやりたいことが他にできたので今回の退職となりますが、はてなは本当にいい会社だと思ってます。

この8年ではてなを通じて私に関わっていただいた全ての皆様にお礼申し上げます、ありがとうございました。

今後もユーザーとしてはてなを応援していきたいと思ってます。

100人を超えるコミュニティーを1年半くらい運営して得たDiscordサーバー運営術

2022年10月に約1年半運営してきたウマ娘のサークルを解散した。

サークルを解散するまでの1年半で学んだことを2022年も終わるのでここに供養したいと思う。

いわゆるオンゲーのギルドも会社組織みたいなもんだと思うので、仕事にも役立つかもしれない。

考え方的なこと

細かく言及するようなことでもないので軽く羅列

  • 自分や周りの人が当たり前のようにできても、それができない人はいる
  • 守れない人の多いルールはそもそもルールが破綻してることの方が多いから考え直す
  • 何でも一人で抱えすぎない
    • 協力的な人を見つけて巻き込む
  • 運営メンバーの考えはちゃんとアウトプットする
  • 多様性に配慮する

テキストコミュニケーション

古くはIRC、今はSlackやDiscordで仕事でもプライベートでもコミュニケーションを取る人間なのでテキストチャットでのコミュニケーションに関する知見はそれなりにあると思うがそれでも学ぶことは多かったと思う。

Webページのスクショや拾いモノ画像は貼るな、URLを貼れ

これスマートフォンネイティブの人がやりがちだと思っているんだけど、スクショは下記のような点で圧倒的にURL+埋め込みの情報表示に劣るので本当にやめた方がいい。

  • ソースとしての信頼性が低い
  • 更新に追従しない
  • テキストのコピーができない
    • これは一部の情報において致命的

特に上の2つは軽視してる人が多いんだけど、デマが広がったり情報が誤解されたまま解釈されるとかあるので本当に良くない。

ウマ娘愛好会では基本的にWebページのスクショを貼るのを禁止していて、必ずソースのURLを貼るようにお願いしていた。

これはTwitterから拾った画像です、とかYouTubeのスクショとかも同様。どれも該当するパーマリンクが存在するんだからそれを貼ってくれ〜〜〜〜〜〜〜

Bot導入

積極的に導入せよ、いなくて困ることはあってもいて困ることはそんなにない。

あなたがNode.jsの書けるソフトウェアエンジニアなら自分でBot書くのもあり。

ウマ娘愛好会は最終的にサークル加入からメンバー管理、通話の読み上げ、ファン数の管理まで全てBotで行われるようになった。

適切なロール運用

最低限運営メンバーとそれ以外、くらいのロールはあった方がいい。

運営メンバー以外のロールはeveryoneでもよさそう。

everyoneの権限をデフォルトから削るのは、メンバーにかなりの不便を強いるのでやめるのが吉。

ちなみにウマ娘愛好会ではeveryoneにはデフォルトに+でイベント管理や絵文字管理の権限をつけていた(メンバーでも使いやすくなるように)

最多の頃で120人以上メンバーがいたけど、悪用されたことはない。

適切なテキストチャンネルの分割

話す人間が多くなってくるとテキストチャンネルの分割は必須になってくる。アクティブで喋る人が4-5人くらいでもう分割を考えた方がいいと思っている。

ゲームのDiscordサーバーなんかだと分け方は分かりやすくて、コンテンツとか目的で分けると吉。

その他だと以下のようなチャンネルが作られると良いと思う。

  • イベント系
    • イベントの情報を話すチャンネル、規模によってはイベントごとに作ってもいいだろうし、イベントだけでまとめててもいいと思う
  • 攻略系
    • 攻略情報を貼るようなチャンネル、コンテンツによって必要なことが違うゲームはできる限りコンテンツごとに分けた方がいい。例えばウマ娘だとチャンミと競技場で必要な育成方法が全然違う。
  • ガチャ報告系、愚痴系
    • 一般的に聞きたくない、見たくない人が一定層いるものを隔離するチャンネル。人が増えてきたらあった方がいいし、人が増えてなくてもガチャ結果系は隔離した方が平和を保てると思う。
  • ゲーム外の雑談チャンネル
    • ゲームがきっかけで集まった人でもゲーム以外の雑談したくなると思う。ウマ娘愛好会では出張時に現地の人にウマい飯店を聞くという行為が流行っている印象。
    • 競馬の話題のチャンネルではG1の開催日は普段話さない人も含めて盛り上がっている。(自分は見ているだけだけど)
    • 別ゲーを一緒にやるためのチャンネルもある、一時期Apexとか麻雀とかがめっちゃ流行っていた(Apexは今はウマ娘プレーヤーの集まるサーバーに移行したけど)
  • 運営メンバーとのコミュニケーションチャンネル
    • これは重要、ちゃんとメンバーとコミュニケーションしよう。一方的なやり方だと誰もついてこない。
    • お知らせのチャンネルは運営メンバーだけ書き込めるようにしておきましょう

ボイスチャンネル

ボイスチャンネルの有無はサーバーの方向性によりそう。個人的にはあってほしい。

聞き専の人の参加ハードル下げるために読み上げ系botは必須。音楽再生Botとかはお好みで。

あらかじめ想定されるチャンネルを作っておくのもいいけど、それ以外に雑多に使えるように一時的なボイスチャンネルを作れるBotを導入したりすると便利。

サークルDiscordサーバーの今

解散して3ヶ月が経とうとしているウマ娘愛好会のDiscordサーバーだが、未だに毎日誰かが喋っている状態。ここから一緒に他のゲームをやったり、相変わらずウマ娘の話や競馬の話をしたりで盛り上がっている。

跡地としてはまあ成功したんじゃないか。

最後に

まとまらなかった。今後もうこんな規模のDiscordサーバーを運営する機会はたぶん来ないが、いい勉強になった。

ウマ娘のサークルグループDiscord Botを開発・運用している話

ウマ娘にはオンゲによくあるギルドみたいな「サークル」という機能があって、サークルごとに1ヶ月で育成したウマ娘のファン数合計で競うランキング機能があったり、キャラ強化用のアイテムをサークルメンバーに寄付してショップでアイテム交換できるポイントをもらったり、みたいなことができる。

umamusume.jp

自分が所属しているサークルグループ「ウマ娘愛好会グループ」では創設サークルの「シン・ウマ娘愛好会」や昨年12月からグループに加わったランキング上位サークルの「西京ファーム」を始め3つのサークル最大90人が一つのグループとして活動していて、Discordサーバーを共有している。

3つあるサークルは枠としては別モノだが、毎月サークル間で移籍することができたり、運営は3サークル合同で行ってたりしていて加入手続きやメンバー管理、募集枠の確定などあらゆるプロセスが複雑になりがち。 それを解決するために自前でDiscordのbotとWebUIを開発して運用している。

この記事ではそのシステムの概要について書き連ねることにする。

それぞれの細かい内容は別途記事にする。

続きを読む

シンボリックリンクを含むディレクトリを再帰的にコピーしたい場合はcp -Rを使うとよい

CUIでよく使うコマンドに cp があるが、ディレクトリーごとコピーしたい場合は cp -r src dest みたいな感じで -r をよく使っている。

しかしこれだとシンボリックリンクをはっていた時に実体がコピーされてしまってリンクが切れる。

そこで -r の代わりに -R を使うとシンボリックリンクのままコピーされてリンクを保つことができる。

linuxjm.osdn.jp