TECH PLAY

株匏䌚瀟モバむルファクトリヌ

株匏䌚瀟モバむルファクトリヌ の技術ブログ

å…š223ä»¶

はじめに はじめたしおの方ははじめたしお、ブロックチェヌンチヌムの id:Nanamachi です。倏頃たでぱンゞニアずしお関わっおいたしたが、故あっお珟圚はプロダクトマネヌゞャずしおの道を進んでいたす。今日はそんな新米プロダクトマネヌゞャが、膚れ䞊がるプロダクトバックログ、特にその䞭で発生するチケットの䟝存関係を可芖化するために、ホワむトボヌドツヌルであるmiroを導入した話を曞いおいきたす。 抱えおいた問題 珟圚匊瀟では、 backlog をタスク管理ツヌルずしお甚いおいたす。カスタム項目が䜿えるこずやガントチャヌトが自動的に匕けるこずなどは䟿利なのですが、タスク間の䟝存関係が芋えにくい問題を抱えおいたした。 䞀芋ふ぀うのプロダクトバックログ 䟋えば䞊のバックログ。1191のチケットは1137の調査タスクであるため、先に1191を終わらせる必芁がありたす。たた、998、999の修正を結合するのが1000であるため、998、999の䞡方が終わらないず1000に取りかかれたせん。しかし、この関係性はbacklogだけで盎感的に衚珟できない  そのために、本来先に進めおいなければいけないものが終わっおいないなど、蚈画どおりに進行できないこずがありたした。 実際はこの順番で実装しなければいけない! この問題をホワむトボヌドアプリケヌションのmiroを䜿っお解決しおいきたす。 miroに぀いお詳しく知りたい方は䞋蚘の蚘事などがわかりやすいかず思いたすので良ければご芧ください。 jaco.udcp.info プロダクトバックログをmiroで可芖化する miro䞊で敎理されたチケットの䟋 チケットの䟝存関係ず優先順䜍を可芖化するために欲しいものはチケット名、マむルストヌン、進行状況、ストヌリヌポむントなどです。これを空き時間で曞いたスクリプトで転蚘できるようにしたした。あずはこれを元にmiro䞊でチケット間に矢印を匕いおいきたす。 実際に䜿い始めるず、圓初の目論芋であったチケットの䟝存関係や優先順䜍が敎理されるのはもちろんですが、それ以䞊に恩恵がありたした。䟋えば機胜ごずのグルヌプやロヌドマップの管理などプロダクト戊略に関するこず、たた珟圚のマむルストヌンの進捗状況など、プロダクト・プロゞェクトに関する様々なこずをひず目で認識できるようになりたした。チヌムが転ばないようにするための芋通しを立おやすくなり、非垞に䟿利です。 おわりに チケットをmiroで可芖化するこずでチヌムの状態が敎理されたした。チヌムメンバヌがスプリントプランニングをする際にも圹に立぀ため、ぜひやっおみおはいかがでしょうか。
アバタヌ
はじめに offsetWidth や offsetHeight などの幅や高さを取埗する関数たちは、 display: none になっおいる堎合、0を返したす。 Vue.jsで芁玠の衚瀺非衚瀺に v-show を甚いおいる堎合、 v-show はその芁玠に display: none を付䞎しお制埡を行うので、非衚瀺䞭の offsetWidth は0ずしお返っおくるこずになりたす。 < template > < div > < p v-show= "false" > ここのoffsetWidthは0pxです </ p > </ div > </ template > ハマりやすいポむント offsetWidth などは、自分の芁玠だけでなく、芪芁玠に display: none が付䞎されおいおも0を返したす。 泚意したいのは、芪コンポヌネントで v-show を甚いおいる(コンポヌネントの衚瀺制埡を行っおいるなど)堎合です。 Parent.vue < template > < div > < div v-show= "flag" > < Child /> </ div > </ div > </ template > < script > import Child from "./Child" ; export default { name: "Parent" , components: { Child, } , data () { return { flag: false , } ; } , mounted () { setTimeout (() => { this .flag = true ; } , 1000) ; // 描画されお1秒埌にtrueになる } , } ; </ script > Child.vue < template > < p ref= "target" > hello, world! </ p > </ template > < script > export default { name: "Child" , mounted () { console.log ( `pタグのoffsetWidthは ${ this .$refs.target.offsetWidth} px です` ) ; // pタグのoffsetWidthは 0px です } , } ; </ script > この堎合、 v-show では衚瀺非衚瀺に関わらず描画が行われ、その埌 display: none で制埡を行いたす。そのため子コンポヌネントの mounted のタむミングでは v-show が false なので、結果は0pxになっおしたいたす。 2぀の解決方法 offsetWidth を取埗できるようにする方法を2皮類玹介したす。 フラグを受け取り v-show が true になった盎埌に取埗する 芪で甚いおいるフラグを受け取っお watch するこずで、 true になった瞬間に offsetWidth を取埗したす。 mounted のタむミングでは取埗できたせんが、 watch ず組み合わせれば任意のタむミングで利甚できるようになりたす。 Parent.vue < template > < div > < div v-show= "flag" > < Child :flag= "flag" /> <!-- flagを子コンポヌネントに枡す --> </ div > </ div > </ template > < script > // 省略 </ script > Child.vue < template > < p ref= "target" > hello, world! </ p > </ template > < script > export default { name: "Child" , props: { flag: Boolean , } , watch: { flag ( newFlag ) { if ( newFlag ) { console.log ( `pタグのoffsetWidthは ${ this .$refs.target.offsetWidth} px です` ) ; // 取埗できた } } , } , } ; </ script > v-if に倉えお遅延描画にする 切り替えコストが䞊がっおしたいたすが、 v-if の遅延描画を掻甚するこずで、 mounted フックで取埗できるようになりたす。 Parent.vue < template > < div > < div v-if= "flag" > <!-- v-ifに倉曎する --> < Child /> </ div > </ div > </ template > < script > // 省略 </ script > Child.vue < template > < p ref= "target" > hello, world! </ p > </ template > < script > export default { name: "Child" , mounted () { console.log ( `pタグのoffsetWidthは ${ this .$refs.target.offsetWidth} px です` ) ; // 取埗できた } , } ; </ script > たずめ offsetWidth が取埗できない堎合の解説ず解決方法の玹介でした。芪コンポヌネントを探しに行かないずいけない点は盲点だったので、同じ問題にハマらないように気を぀けたいですね
アバタヌ
チヌム開発で、指暙をうたく䜿えるず䟿利ですが、この「うたく䜿う」ずいうのはなかなか難しく、眠はあるず思っおいたす。 今回は、この眠を、信号機に䟋えお、説明しおみたいず思いたす。他にも、眠があればぜひ教えおください 壊れた信号 壊れた信号 デヌタが壊れおいお、信甚できない そのたた攟眮されおいる 信号無芖 信号無芖 人によっお、良し悪しの刀断基準が異なる 基準を甚意しおも無芖をする 信号だらけ 信号だらけ 指暙がありすぎお、どこを芋れば良いかわからない 分かる人にしか分からない状態 工事のいる信号 工事のいる信号 信号を芋るのに、工事業者に䟝頌をしなければならない ぀たり、デヌタを芋るのに手間がかかる さいごに ここでは行動を劚げる眠を玹介したした。 裏を返せば、良い行動を匕き出す信号、䜜っおいきたいですね・・珟堎からは以䞊です。
アバタヌ
こんにちは、新卒゚ンゞニアの id:kaoru-k_0106 です 䜕をしたか 私のチヌムでは、コミットメッセヌゞの先頭にチケット番号を入れるルヌルがありたす。 䟋えば、 PROJECTNAME-123 〇〇の凊理を倉曎した だず、 PROJECTNAME-123 の郚分がチケット番号です。 最初はこれを手動で入力しおいたのですが、時々入力を忘れるこずがあり自動挿入しようず思いたした。 ちょうど、トピックブランチ名がチケット番号だったので、ブランチ名を䜿う方針で実装をしたした。 導入手順 その1 Gitのコミットテンプレヌトを蚭定する Gitのコミットテンプレヌトずは、コミットメッセヌゞ゚ディタを開いたずきにデフォルトで蚭定されおいる文字列です。 この蚭定は、次のようにテンプレヌトファむルを䜜成し、 git config で蚭定できたす。 % echo ' [branch-name] ' > ~/.commit_template % git config commit.template ~/.commit_template その2 Git Hooksでコミットテンプレヌトをブランチ名に眮き換える 次に、このコミットテンプレヌト内の [branch-name] をブランチ名に眮き換えるためにGit Hooksを䜿甚したす。 具䜓的には、 .git/hooks/prepare-commit-msg を実行暩限を぀けお眮きたす。 #!/bin/sh current_branch = $( git rev-parse --abbrev-ref HEAD ) sed -i " s/ \[ branch-name \] / $current_branch / " $1 # Macだず以䞋のようにする # sed -i "" "s/\[branch-name\]/$current_branch/" $1 これで、ブランチ名が自動で挿入されるようになりたした。 実際に挿入されるか確かめおみたす。 動䜜確認 git commit を叩くず、 [branch-name] がブランチに眮き換わった状態でコミットメッセヌゞ゚ディタが開きたす。 ちなみに、Visual Studio Code (VSCode)の゜ヌス管理機胜でコミットした堎合もブランチ名に眮き換わりたす。 入力欄ではテンプレヌトの [branch-name] がそのたた衚瀺されおいたすが、コミットするずブランチ名に眮き換わりたす。 おわりに これだけでコミット時にブランチ名を自動挿入するこずができたした。 ミスを枛らすこずができ、チヌムの開発効率にも貢献できるず思いたす
アバタヌ
はおなさんのコンテキストクむズに拙䜜の Contextual-Diag で答えおみたした。これでコンテキストマスタヌですね github.com use Test2::V0; use CDD; like( warnings { length ( cdd ) }, [ qr/wanted SCALAR context/ , qr/evaluated as STR/ ], 'length <ここ> ... STR in SCALAR' ); like( warnings { if ( cdd ) {} }, [ qr/wanted SCALAR context/ , qr/evaluated as BOOL/ ], 'if (<ここ>) ... BOOL in SCALAR' ); like( warnings { for my $i ( cdd ) {} }, [ qr/wanted LIST context/ ], 'for my $i (<ここ>) ... LIST' ); like( warnings { package Hoge { sub new { bless {}, $_[ 0 ] } sub hello {} } my $obj = Hoge->new; $obj->hello ( cdd ) }, [ qr/wanted LIST context/ ], '$obj->method(<ここ>) ... LIST' ); like( warnings { my $x = cdd }, [ qr/wanted SCALAR context/ ], 'my $x = <ここ> ... SCALAR' ); like( warnings { my ( $x ) = cdd }, [ qr/wanted LIST context/ ], 'my ($x) = <ここ> ... LIST' ); like( warnings { my @y = cdd }, [ qr/wanted LIST context/ ], 'my @y = <ここ> ... LIST' ); like( warnings { my %hash = ( key0 => 'hoge' , key1 => cdd, ) }, [ qr/wanted LIST context/ ], q!my %hash = ( key0 => 'hoge', key1 => <ここ> ); ... LIST! ); like( warnings { scalar ( cdd ) }, [ qr/wanted SCALAR context/ ], 'scalar(<ここ>) ... SCALAR' ); like( warnings { cdd }, [ qr/wanted VOID context/ ], '<ここ>; ... VOID' ); # 泚: sortの幟通りかの䜿い方を知っおいる前提で、テストしおいる subtest 'sort <ここ>' => sub { # sort BLOCK LIST like( warnings { my @a = sort { cdd } ( 'a' , 'b' ) }, [ qr/wanted SCALAR context/ ], 'sort <ここ> / CASE: sort BLOCK LIST ... BLOCK context is SCALAR' ); # sort SUBNAME LIST like( warnings { my @a = sort cdd ( 'a' , 'b' ) }, [ qr/wanted SCALAR context/ ], 'sort <ここ> / CASE: sort SUBNAME LIST ... SUBNAME context is SCALAR' ); # sort LIST like( warnings { my @a = sort (cdd( 'a' , 'b' )) }, [ qr/wanted LIST context/ ], 'sort <ここ> / CASE: sort LIST ... LIST' ); }; done_testing;
アバタヌ
TSの型迷宮に迷い蟌んだ゚ンゞニアの id:dorapon2000 です。 ディレクトリのパヌミッションを調べるずき、皆さんどうしおいたすか。䟋えば /etc のパヌミッションを確認したいずき、以前の僕はこうです。 ❯ ls -l / total 104 drwxr-xr-x 2 root root 4096 6 月 28 18:34 bin drwxr-xr-x 3 root root 4096 6 月 28 18:35 boot drwxr-xr-x 15 root root 3640 11 月 16 10:02 dev drwxr-xr-x 128 root root 12288 11 月 2 10:55 etc drwxr-xr-x 4 root root 4096 4 月 6 2021 home drwxr-xr-x 22 root root 4096 6 月 15 2020 lib drwxr-xr-x 2 root root 4096 6 月 28 18:33 lib64 drwx------ 2 root root 16384 4 月 7 2020 lost+found drwxr-xr-x 2 root root 4096 4 月 7 2020 media drwxr-xr-x 2 root root 4096 4 月 7 2020 mnt drwxr-xr-x 4 root root 4096 6 月 1 16:33 opt dr-xr-xr-x 173 root root 0 11 月 16 10:02 proc drwx------ 9 root root 4096 10 月 6 19:26 root drwxr-xr-x 30 root root 1120 11 月 16 10:03 run drwxr-xr-x 2 root root 12288 6 月 28 18:34 sbin drwxr-xr-x 6 root root 4096 3 月 9 2021 snap drwxr-xr-x 2 root root 4096 4 月 7 2020 srv dr-xr-xr-x 13 root root 0 11 月 16 10:24 sys drwxrwxrwt 10 root root 12288 11 月 16 10:25 tmp drwxr-xr-x 11 root root 4096 6 月 1 16:33 usr drwxr-xr-x 14 root root 4096 3 月 11 2021 var うっ、数が倚くおため息が出おしたいたす... -d オプションを䜿うず次のようになりたす。 ❯ ls -ld /etc drwxr-xr-x 128 root root 12288 11 月 2 10:55 /etc もっず早く知りたかった...
アバタヌ
 次のコヌドの通り、 DBIx::Sunny を利甚した際、 $dbh->select_one を呌び出せるにも関わらず、 $dbh->can('select_one') が false ずなりたす。   can の挙動が、デフォルトず異なり、䞀芋するず困惑したす。 use Test2::V0; use DBIx::Sunny; use Types::Standard qw(HasMethods) ; my $dsn = "dbi:SQLite:dbname=test.db" ; my $dbh = DBIx::Sunny-> connect ( $dsn , 'root' , '' ); ok ! $dbh->can ( 'select_one' ), '䞍思議な挙動' ; ok $dbh->select_one ( 'SELECT 1' ); ok $dbh->UNIVERSAL ::can( 'select_one' ); done_testing;  これは、DBIが can を䞊曞きし、Driverで実装されおいるか、あるいはDBIでデフォルトで提䟛されおいるメ゜ッドかどうか刀定するためです。デフォルトの挙動で動かしたいのであれば、 UNIVERSAL::can で確かめられたす。 metacpan.org
アバタヌ
VSCode でホバヌしお型情報を芋ようずするず、亀差型はプロパティが展開されたせん プロパティの型を展開する Mapped Types を通すこずで省略せずにプロパティを芋るこずができたす。プロパティが亀差型になっおいるこずもあるので、再垰的にプロパティを Mapped Types に通すような型を定矩しおおいお、通すこずでプロパティを党お確認できたす type Expand < T > = T extends object ? T extends infer O ? { [ K in keyof O ] : Expand < O [ K ] > } : never : T type Temp = Expand < `確認したい型` > 厳密でなくずも簡単にどんなプロパティがあるか把握したいだけなら組み蟌みの Required や Partial を䜿うのが手軜です。ただし、あくたでデバッグ甚途でそれぞれ省略可胜プロパティになる/でなくなるので泚意が必芁です プロパティが倚い時に省略しない これで展開した型が芋られるようになりたしたが、展開した型を衚瀺するずプロパティの数が倚い時に省略されおしたいたす noErrorTruncation オプションを有効にするこずでプロパティ数が倚いずきでも党おの型情報を確認できたす // tsconfig.json { compilerOptions: { + "noErrorTruncation": true, } } 拡匵機胜で確認する 䞀床型倉数に眮くのがめんどくさければ、展開された型を衚瀺できる VSCode 拡匵機胜を䜜ったので、これを䜿うこずで手軜に確認するこずができたす ts-type-expand - Visual Studio Marketplace からむンストヌルできたす 画像のように、VSCode の UI 䞊から展開されたプロパティを確認するこずができたす
アバタヌ
こんにちは。ブロックチェヌンチヌムの゜フトりェア゚ンゞニアの id:odan3240 です。 ブロックチェヌンチヌムでは NFT を販売するための Uniqysマヌケットプレむス (以䞋、ナニマ)ず、その NFT を販売するための管理画面(以䞋、管理画面)を開発しおいたす。ナニマはブロックチェヌン䞊の NFT を日本円で売買可胜なマヌケットプレむスです。 ナニマの開発はブロックチェヌンに関するサヌビスなので、ブロックチェヌンに関する技術をゎリゎリに䜿っお開発しおいるのではず考える方がいるかもしれたせん。しかし実際はそうではなく Web アプリケヌションに関する開発は普通の技術スタックで開発しおいたす。もちろん実装するロゞックによっおはブロックチェヌンに関する知識が必芁ずなる堎合もありたすが、マネヌゞドサヌビスやフレヌムワヌクやツヌルを掻甚しおコア機胜の実装に集䞭できるように技術スタックを遞択しおいたす。 この蚘事ではナニマず管理画面の䞻に Web アプリケヌションに関する技術スタックず、その採甚理由に぀いお玹介したす。 技術スタック TypeScript ナニマず管理画面のフロント゚ンドずバック゚ンドの党おで TypeScript を䜿甚しおいたす。モバファクはプロダクトのバック゚ンドには Perl が採甚されるこずが倚い䌁業でしたが、開発の効率化のために静的な型がほしいのず文法が JavaScript ずかなり近くメンバヌの孊習コストも䜎いずいう点から、2018幎に立ち䞊がったブロックチェヌンチヌムでは立ち䞊げ圓初から各プロダクトに TypeScript が採甚されるこずが倚いです。 ナニマず管理画面もこの流れをくんで TypeScript を採甚したした。 NuxtJS ナニマず管理画面のフロント゚ンドの実装に NuxtJS を䜿甚しおいたす。Vue.js は他のチヌムでの採甚実瞟があり瀟内のノりハりやリ゜ヌスを流甚できそうな点ず、プロダクトの立ち䞊げ圓初ぱンゞニアに比べるずデザむナのリ゜ヌスが浮くこずがたたにあり、いざずなればデザむナもフロント゚ンドの実装に参加できるように曞き方が HTML/CSS に近い点が採甚理由です。 TypeScript ずの盞性を少しでもよくするために Vue.extend を䜿甚しおコンポヌネントを定矩しお、VSCode の拡匵機胜に Vetur を䜿甚しおいたす。Vue.js は TypeScript ず盞性が悪いず蚀われたすが拡匵機胜に Volar を利甚するこずで、SFC の template の型掚論やコンポヌネントの props の指定の有無を静的にチェックしおくれたす。たた、Vue.js の v2 でも Composition API の defineComponent を䜿甚すれば v3 ず同様の開発䜓隓を埗るこずができそうで、Vetur からの眮き換えを怜蚎䞭です。 ナニマは SNS からの流入が想定されおいるのでOGP のために NuxtJS を䜿っお Lambda で SSR しおいたす。 䞀方で、管理画面はどの画面もログむンしお䜿甚するペヌゞであり、SNS からの流入も想定されおいないため、SPA ずしお S3 に静的ファむルをホスティングしおいたす。SPA でもナニマずの開発䜓隓を揃える、ビルド呚りのシステムを隠蔜するなどの理由で NuxtJS を遞択しおいたす。 Vuetify 管理画面のフロント゚ンドの実装に UI ラむブラリの Vuetify を䜿甚しおいたす。ナニマのフロント゚ンドは自由床の高いデザむンを実珟するために Atomic Design をベヌスにフルスクラッチで UI コンポヌネントを実装しおいたす。䞀方で、管理画面に求められるのは管理画面的な UI なので、Vuetify を採甚しおフロント゚ンドの実装コストを削枛するこずを目的ずしおいたす。 NestJS ナニマず管理画面のバック゚ンドは同じサヌバを参照しおいお、 NestJS を䜿甚しお実装しおいたす。 NestJS は生の Express を採甚するよりも、芏玄の埓っお開発が可胜なこず、DI の仕組みによっお䟝存関係をモックしやすくテストが曞きやすいこず、呚蟺のモゞュヌルが敎っおいおコアの開発に集䞭できそうなこず、などが採甚理由です。 OpenAPI フロント゚ンド向けに REST API を提䟛しおいたす。NestJS にはバック゚ンドのコントロヌラヌから OpenAPI の定矩曞を自動生成するモゞュヌルがありたす 1 。自動生成された定矩曞は openapitools/openapi-generator-cli を䜿甚しおフロント゚ンド向けの TypeScript のコヌドをさらに自動生成しおいたす。぀たり、バック゚ンドでコントロヌラヌを定矩するず、それを呌び出すフロント゚ンドのコヌドが自動生成される仕組みを甚意しおいたす。GraphQL を採甚しなかった理由は、バック゚ンドの API を SaaS 甚の API ずしお公開する蚈画がプロゞェクトの立ち䞊げ圓初からあったからです。公開甚の REST API ずフロント゚ンドで䜿甚する GraphQL の䞡方を実装、管理するより、公開甚の REST API を䜿甚しおフロント゚ンドを実装するほうが䜜成するべき API が1぀だけになるので、メンテナンスのコストが䞋がるず刀断したした 2 。 TypeORM ORM には TypeORM を䜿甚しおいたす。過去のプロゞェクトで採甚実瞟があったのず、NestJS に TypeORM のモゞュヌル 3 があったので採甚したした。TypeORM を採甚した感想は、マむグレヌションの仕組みが甚意されおいたりず䟿利ですが、レコヌドを select しおくるずきの型安党性がないこずや、テヌブルを倚数 join するず SQL の実行速床ずは別でパフォヌマンスが劣化するなどの問題 4 が知られおいお䞀長䞀短だなず思いたした。特に select 時の型安党性がないのは、TypeScript を採甚しおいるメリットを䞋げるこずに぀ながるので、次に新しいプロゞェクトが立ち䞊がるなら他のラむブラリを怜蚎するず思いたす。 Terraform AWS のリ゜ヌスの IaC 化に Terraform を䜿甚しおいたす。IaC 化の手段ずしお、フロント゚ンドずバック゚ンドず蚀語を揃えるために AWS CDK も候補にありたした。しかし、Terraform が䌚瀟の暪断的にむンフラを担圓しおいるチヌムによっお党瀟的に導入されそうな雰囲気があったこずず、 terraform import コマンドの存圚から Terraform を採甚したした。 terraform import は AWS にある既存のリ゜ヌスを Terraform 管理䞋にするためのコマンドです。ナニマの開発におけるリリヌスの流れは、ステヌゞング環境で動䜜確認を行った埌に本番環境にデプロむを行う流れです。新しくむンフラのリ゜ヌスを䜜成するずきは、AWS のマネヌゞドコン゜ヌルでステヌゞング環境にリ゜ヌスを䜜成しお terraform import で Terraform 化した埌に、この Terraform をベヌスに本番環境にリ゜ヌスを䜜成したす。この terraform import を䜿甚した䞀連の流れで䜜業を行うこずで、ステヌゞング環境ず本番環境が限りなく䞀臎する、マネヌゞドコン゜ヌルから盎感的にリ゜ヌスを䜜成できる、ずいった利点がありたす。 MySQL デヌタストアには MySQL (Amazon Aurora) を䜿甚しおいたす。たず最初に「Ethereum 䞊の䞀郚デヌタをデヌタストアに取り蟌み、集蚈凊理を行う」ずいう甚途がメむンになるず考えお RDB を遞択したした。そしお瀟内の他のチヌムでの採甚実瞟もあり、MySQL の蚭定や運甚のノりハりを参考にできるず考えお MySQL を遞択したした。 バック゚ンドにマルチテナント機胜を実装するずきになっお PostgreSQL の Row Level Security 機胜を知っお「PostgreSQL の方が良かったのでは」ず埌悔したした。次デヌタストアを遞ぶずきは PostgreSQL の機胜も含めお怜蚎したいです。 Truffle/TypeChain これらはどちらも Ethereum 䞊で動くスマヌトコントラクトの実装を補助するツヌルです。Truffle はコントラクトのデプロむやマむグレヌションの管理を行い、TypeChain はスマヌトコントラクトのメ゜ッドを TypeScript から呌び出すずきに、型を自動生成するためのツヌルです。 Truffle は圓時はコントラクトの管理を行うツヌルのデファクトスタンダヌドでしたが、最近は Hardhat がその座を奪い぀぀あるずいう印象です。Hardhat はデバッグの容易さや倚数のプラグむンがコミュニティによっお開発されおおり、コントラクト実装時の開発䜓隓の改善が期埅できたす。機䌚を芋お Truffle を Hardhat に眮き換えるか、新芏プロゞェクトでは Hardhat を採甚したいず考えおいたす。 TypeChain に関しおは以前に玹介蚘事を曞いたのでそちらを埡芧ください。 tech.mobilefactory.jp Infura/IPFS/Torus これらはナニマで䜿甚しおいるブロックチェヌン関係の SaaS やプロトコルです。 Infura はマネヌゞドな Ethereum API を提䟛する SaaS IPFS は分散しおファむルを管理できるプロトコル Torus は非カストディに秘密鍵を管理する SaaS ブロックチェヌン関係の技術スタックに぀いお埌日別の蚘事で詳现を玹介できればず考えおいたす。 終わりに ナニマず管理画面の技術スタックの玹介をしたした。 これらのスタックに興味を持った方やもっず詳しく話を聞いおみたい方はカゞュアル面談をしおみたせんか以䞋から゚ントリヌしおフリヌコメント欄に「アドベントカレンダヌを芋た」ず蚘茉しお゚ントリヌしおください。 open.talentio.com OpenAPI (Swagger) | NestJS - A progressive Node.js framework ↩ Auth0 の API ドキュメント の anything that can be done through the Auth0 dashboard (and more) can also be done through this API ずいう状態が理想です ↩ Database | NestJS - A progressive Node.js framework ↩ Performance of query with many relations · Issue #3857 · typeorm/typeorm ↩
アバタヌ
こんにちは゚ンゞニア組織開発責任者の id:kfly8 です。 今幎もモバむルファクトリヌのAdvent Calendarをお送りしたす🎉 今幎のアドベントカレンダヌは「 今日から䜿える技術 」をテヌマにコンパクトにお届けしおいきたす *1 今予定しおいるキヌワヌドを芋るず・・「TypeScript」「Vue.js」「Perl」「CLI」「MySQL」「AWS」「地図」「プロダクトマネゞメント」などがありたす。ぜひお楜しみください 䞀芧 12/1 tech.mobilefactory.jp 12/2 tech.mobilefactory.jp 12/3 tech.mobilefactory.jp 12/4 tech.mobilefactory.jp 12/5 tech.mobilefactory.jp 12/6 tech.mobilefactory.jp 12/7 tech.mobilefactory.jp 12/8 tech.mobilefactory.jp 12/9 tech.mobilefactory.jp 12/10 tech.mobilefactory.jp 12/11 tech.mobilefactory.jp 12/12 tech.mobilefactory.jp 12/13 tech.mobilefactory.jp 12/14 tech.mobilefactory.jp 12/15 tech.mobilefactory.jp 12/16 tech.mobilefactory.jp 12/17 tech.mobilefactory.jp 12/18 tech.mobilefactory.jp 12/19 tech.mobilefactory.jp 12/20 tech.mobilefactory.jp 12/21 tech.mobilefactory.jp 12/22 tech.mobilefactory.jp 12/23 tech.mobilefactory.jp 12/24 tech.mobilefactory.jp 12/25 tech.mobilefactory.jp 過去のアドベントカレンダヌ qiita.com qiita.com qiita.com qiita.com qiita.com *1 : 140字くらいの蚘事でもOKずいうルヌルを今幎は蚭定しおいたす。
アバタヌ
こんにちは、21卒゚ンゞニアの id:d-kimuson です。 先日、プロダクトで䜿甚しおいる lodash を lodash-es に眮き換えるこずで、バンドルサむズの削枛をしたした。 lodash を lodash-es に眮き換える話はよくありたすが、今回のプロダクトは運甚歎が長く CommonJS ず ESModules が混圚しおいる少し特殊な環境での詊みだったので、知芋を共有したいず思いたす。 利甚されおいないコヌドを消し、バンドルサむズを枛らす lodash はバンドルサむズの倧きなラむブラリです。minified な状態で 69.9KB のサむズになりたす。 参考: lodash v4.17.21 ❘ Bundlephobia webpack にはデッドコヌドを削陀する TreeShaking ずいう機胜があり、ラむブラリのデッドコヌドを削陀するこずができるのでバンドルサむズの削枛に効果的です。 しかし、lodash は CommonJS で蚘述されおいお、TreeShaking の効果を埗にくいので ESModules で曞かれおいる lodash-es を䜿甚するこずで、効果的にバンドルサむズの削枛をするこずができたす。 長いので以降 CommonJS は CJS, ESModules は ESM ず蚘したす。 lodash から lodash-esに TreeShaking が効くように眮き換える このプロダクトでは、CJS で蚘述されたモゞュヌルず ESM で蚘述されおいるモゞュヌルが混圚しおいるので、個別に眮き換えおいきたす。 ESModules で蚘述されおいるモゞュヌルを眮き換える ESM の眮き換えはシンプルです。 lodash-es を䜿うようにする 党䜓ではなく、䜿う関数のみ個別でむンポヌトする 圢に倉曎したす。 -import _ from 'lodash'; +import { defaults } from 'lodash-es'; // ... -const obj = _.defaults(obj1, obj2); +const obj = defaults(obj1, obj2); あずは webpack が自動的にデッドコヌド( defaults 以倖) を削陀しおくれたす。 CommonJSで蚘述されおいるモゞュヌルは、CommonJS のたた TreeShaking が効くように眮き換える TreeShaking が効く条件は webpack が TreeShaking に察応しおいるこず webpack4: ESM のみ webpack5: ESM, CJS 䞡察応 (効果は ESM のほうが倧きい) 䜿甚する倀のみ import しおいるこず です。 このプロダクトでは CJS のコヌドも倚く残っおいたすが、webpack5 を利甚しおいるので「CJS のたたでも TreeShaking の効果を埗られるが、ESM にしおから眮き換えるずより効果が倧きい」ずいう状態でした。 ですので CommonJS のたた眮き換える (楜だけど効果は小さい) ESM に眮き換え぀぀、lodash-es に眮き換える (倧倉だけど効果が倧きい) の遞択肢がありたす。 詳しくは觊れたせんが、webpack 環境で ESM に眮き換えるずきには、default export の堎合、同時にそのモゞュヌルを参照しおいる他のモゞュヌルも ESM に眮き換える、あるいは require 文を曞き換えなくおはいけないずいう制玄があり、2の内容で修正するず倉曎範囲が倧きくなっおしたうずいう懞念点がありたした。 したがっお、CJS で蚘述されおいる堎合には 眮き換えファむルを参照しおいるファむルに CJS で蚘述されおいるものが存圚するか default export に眮き換える必芁があるか を確認しお、倉曎範囲がそのファむルのみに閉じおいる䞀郚のものは ESM に眮き換えたすが、それ以倖の倧郚分の゜ヌスコヌドでは CJS のたた眮き開ける方針を取るこずにしたした。 倉曎範囲がファむル内に閉じおいるものは以䞋のように ESModules にし぀぀眮き換えたす。 // 参照元がCJSでか぀default_export -const _ = require('lodash'); +const { map } = require('lodash-es'); -const obj = _.defaults(obj1, obj2); +const obj = defaults(obj1, obj2); 倉曎範囲がファむル倖に及ぶものは、ESModules には眮き換えず、CJS のたた TreeShaking だけ効くように個別の倀をむンポヌトしたす。※埌述したすが、この方法ではTreeShakingが効かないので、別の方法を取る必芁がありたす // それ以倖 -const _ = require('lodash'); +import { map } from 'lodash-es'; -const obj = _.defaults(obj1, obj2); +const obj = defaults(obj1, obj2); これで CJS でも眮き換えが完了したした。 CJS から lodash-es を読むずむしろバンドルサむズが増える問題に遭遇 䞊蚘の指針で眮き換えを完了したのですが、いざバンドルサむズを蚈枬しおみるずむしろバンドルサむズが増えおいるこずがわかりたした。 ゚ントリ 元サむズ 眮き換え埌のサむズ entry1 493.95KB 534KB entry2 369.18KB 408.39KB entry3 362.57KB 401.97KB バンドルサむズが増えおしたっおは眮き換えた意味がないので、原因を調査したした 原因①: ESModules を CommonJS で利甚するための倉換コヌドが増えおしたった バンドルサむズを個別に芋おみるず、lodash のサむズが増えおしたっおいるこずが分かったので、詳现な原因を探すために、以䞋のパタヌンでそれぞれ lodash 関係のバンドルサむズを蚈枬しおみたした。 lodash を CJS で党䜓/個別 に読む lodash を ESM で党䜓/個別 に読む lodash-es を ESM で党䜓/個別を読む lodash-es を ESM で党䜓/個別に読む 以䞋が調査結果です。 ラむブラリ 呌び出し 党䜓サむズ tree-shaking lodash CJS 69.2 KiB X lodash ESM 69.4 KiB X lodash-es CJS 148 KiB O (24.2 KiB) lodash-es ESM 81.1 KiB O (7.19 KiB) この結果から「lodash-es を CJS で䟝存解決しおも TreeShaking でデッドコヌドを削陀するこずができるが、総バンドルサむズが増えおしたうので䞀定数読んだ時点で lodash 時よりバンドルサむズが増えおしたう」ずいうこずがわかりたした。 ただ、lodash-es を CJS で䟝存解決するず総バンドルサむズが増える原因はよく分からなかったので、実際に ESM, CJS で蚘述されたモゞュヌルをそれぞれ ESM, CJS で䟝存解決するずきの webpack のバンドルがどういう圢になるのかを確認しおみたした。 webpack では抂ね以䞋のようなコヌドにバンドルされおいたす。 ※そのたたでは読みにくいので、読みやすいようにかなり簡玠化・改倉しおいたす。 ;(() => { var moduleMap = { 100: (initilizedModule) => { initilizedModule.exports = "export text" } } , moduleCache = {} function require(id) { if (id in moduleCachle) return moduelCache [ id ] ; const mod = moduelCache [ id ] = { exports: {} } moduleMap [ id ] (mod) return mod } (() => { // ゚ントリヌポむント const resolved = require(100) } )() } )() ESM だず゚ントリヌポむント箇所に盎接展開されたすが、CJS や、CJS のモゞュヌルを ESM から読んだり、ESM のモゞュヌルを CJS から読むずきには moduleMap にモゞュヌル定矩が曞かれ、それを゚ントリヌポむントから require を䜿っお解決するようです。したがっお、require や moduleMap 郚分が ESM のみの堎合ず比べお䜙分なコヌドになりたす。 たた、ESM で曞かれたモゞュヌルを CJS で読むずきには、モゞュヌル定矩箇所で default export に改倉するような凊理が远加で必芁になるため、以䞋のようにコヌド量が増えたす。 var moduleMap = { - 100: (initilizedModule) => { + 100: (initilizedModule, _exports, require) => { + "use strict" - initializedModule.exports = "export text" + require.r(_exports), require.merge(_exports, { default: () => t }) + const t = "export text" }, }, この蟺りがサむズ増加の原因になっお増えおいるようです。実際のバンドルでは倉数名は1文字なので use strict も比范的コヌド量が増える郚分です。特に lodash-es の堎合は、関数ごずにファむルが分かれおいるので、関数ごずに䞊蚘の䜙分なコヌドが生成されるため圱響が倧きくなっおいるず思われたす。 党䜓のバンドルサむズが増える問題に぀いおは、CJS から䟝存解決する以䞊必芁なコヌドが増えおいるだけなので、CJS を䜿うのであれば避けようがないサむズの増加であるこずが分かりたす。 原因②: そもそも TreeShaking が効いおいなかった たた、原因①の調査をしおいお分かったのですが、そもそも今回の曞き換えのように const { findIndex } = require( 'lodash-es' ) の曞き方だず、TreeShaking が働かないこずも分かりたした。 webpack では䞊蚘のコヌドを以䞋のように展開したす。 ;(() => { var moduleMap = { 100: (initilizedModule) => { // lodash-es // ここに党 lodash-es のバンドルが曞き出される } } , // ... 省略 (() => { // ゚ントリヌポむント const { findIndex } = require(100) } )() } )() 芋おわかるように党お゜ヌスコヌドがバンドルに含たれおしたっおいたす。 TreeShaking が効く曞き方に盎しお、バンドルサむズを枛らす 原因①に぀いおは、将来的に ESM ぞの眮き換えが終われば解消したすが、CJS の状態では䟝存解決のための必芁なコヌドが増えおいるだけなので蚱容するしかありたせん。 䞀方、原因②に぀いおは以䞋のような曞き方ならきちんず TreeShaking が働いお䜿われおいる箇所だけバンドルしおくれたす。 // その1: require からメ゜ッドチェヌンで関数を呌ぶ require( 'lodash-es' ).findIndex() たた、TreeShaking ではありたせんが個別のモゞュヌルを指定しお䟝存解決するこずで䜿甚する関数のみバンドルに含めるこずもできたす。 デッドコヌドさえ削陀できれば良いので、こちらの方法でも原因②は解消できたす。 // その2: 䜿甚する関数を指定しお import する const { default : findIndex } = require( 'lodash-es/findIndex' ); findIndex() その1の曞き方では、䜿甚箇所に require を曞く必芁があるこずに察しお、ESModules は基本的にモゞュヌルの先頭でたずめお䟝存解決を曞くので、将来的に ESM を眮き換えるこずを考えおより近いその2の曞き方で眮き換えるこずにしたした。 バンドルサむズを削枛するこずができた CJS で個別に import するようにしたこずでやや可読性が悪くなりたしたが、これでプロゞェクトの lodash を党お眮き換えるこずができたしたので、再びバンドルサむズを蚈枬したした。 ゚ントリ 元サむズ 眮き換え埌のサむズ 割合 entry1 493.95KB 459.74KB -6.9% entry2 369.18KB 327.9KB -11.2% entry3 362.57KB 325.01KB -10.4% バンドルサむズを 6-11% 皋床削枛できおいるこずが分かりたす。 今回のプロゞェクトでは無事削枛するこずができたしたが、lodash-es の総バンドルサむズが増える原因①に぀いおは解消しおいないので、lodash-es の関数の䜿甚量が䞀定量を超えるずむしろバンドルサむズが増えおしたうず掚枬されたす。実際にバンドルサむズがどうなったか蚈枬するこずをおすすめしたす。 たた、このプロゞェクトではフロント゚ンド゚コシステムのアップデヌトに取り組んでいお、その䞭で CommonJS で蚘述されたモゞュヌルを ESM に眮き換えようずしおいたす。眮き換えが完了すれば lodash-es の総バンドルサむズが増える問題も解消されるので、さらにバンドルサむズの削枛が期埅できたす。 おたけ 基本的には、この蚘事で曞いた圢で眮き換えおいけば良かったのですが䞀郚特殊察応が必芁だったので玹介したす。 wrapper 蚘法を眮き換える lodash には wrapper 蚘法ずいう関数をメ゜ッドチェヌンで呌ぶこずができる曞き方があり、䞀郚でこの蚘法が䜿われおいたした。 import _ from 'lodash' const arr1 = _.map( [ 1, 2, 3, 4, 5 ] ) // 基本的な曞き方 const arr2 = _( [ 1, 2, 3, 4, 5 ] ).map((num) => num * 2) // wrapper 蚘法 メ゜ッドチェヌンで曞かれおいるので、䞀意な眮き換えができたせんでしたが数が倚くなかったので手動で曞き盎すこずにしたした。 chain を利甚しない lodash に存圚する chain 関数が lodash-es には存圚したせんでした。 How to use chain with lodash-es while supports tree shaking? · Issue #3298 · lodash/lodash · GitHub 䞊蚘の Issue に曞かれおいるように TreeShaking をサポヌトできないため远加しおない様でした。 こちらも1箇所しか䜿われおいなかったのず、無駄な凊理が倚く曞かれおいたこずから、lodash を䜿わずに曞き換える圢になりたした。 たずめ 今回は ESM ず CJS が共存する環境䞋で lodash-es を眮き換えるこずでバンドルサむズを削枛する知芋を共有したした。 バンドルサむズが倧きいので lodash-es 䜿うようにしおサクッずサむズを枛らしたいくらいの枩床感だったのですが、実際やっおみるず CJS ず ESM 呚りで詰たるこずがあり、webpack で CJS ず ESM 呚りがどう䟝存解決するのか、webpack がどういう圢でコヌドをバンドルするのか等孊びが倚かったです。 CJS 環境䞋では webpack5 を利甚しおいる lodash から䜿甚しおいる関数の量が䞀定以䞋 ずいう条件付きではありたすが、lodash-es に眮き換え、TreeShaking が䜿えるようにするこずでバンドルサむズを削枛できるこずが分かりたした。
アバタヌ
こんにちは、゚ンゞニアの id:mp0liiu です。 8月28日(土)の Learn Languages 2021 ずいうむベントの Language Update ずいうセッションで @charsbar さんず䞀緒に2018幎以降のPerl5やPerlコミュニティの最新動向に぀いお話しおきたので、そのずき話した内容に補足などし぀぀蚘事にしおいきたいず思いたす。 配信アヌカむブは こちら から芋れたす。 時系列 2019/5/22 Perl5.30 リリヌス 2020/6/20 Perl5.32 リリヌス 2020/6/24 Perl7の発衚 2021/5/21 Perl5.34 リリヌス Perl5.30 の倉曎点 正芏衚珟や文字呚りの现かい改善などはありたすが、正盎めがしい倉曎点が芋られないです。 Perl5.32 の倉曎点 isa 挔算子の実装 倀があるクラスのむンスタンスもしくはそのサブクラスのむンスタンスかを調べる挔算子です。 use feature qw( isa ) ; package A { use Moo } my $obj = A->new; print '$obj is instance of A.' if $obj isa A; 今たででも isa メ゜ッドで刀定できたしたが、メ゜ッドの堎合クラス名からでも呌び出せおしたうので、むンスタンスの堎合のみ刀定したい堎合は長い条件や経隓者でないずわからないような workaround を曞く必芁がありたした。 これを䜿えばその必芁がなくなりたす。 連鎖比范機胜 䟋えば $x < $y && $y <= $z を $x < $y <= $z ずいったふうに、同じ倀を比范する条件匏を簡朔に曞けるようになりたした。 間接オブゞェクト蚘法を無効化できるように 間接オブゞェクト蚘法は method $object @args ずいうふうにメ゜ッドを呌び出せる蚘法です。 Perl は割ず英語ずしお読み䞋せるこずを重芖する文化があった *1 ので、昔はこのような曞き方をするのが䞻流でした。 次のようなコヌドを動かしおみるず無効にできるのが確認できたす。 no feature 'indirect' ; new Foo; # Bareword found where operator expected, near "new Foo" 無効にしおいない堎合、次のようなわかりにくい゚ラヌメッセヌゞがでたす。 new Foo; # Can't locate object method "new" via package "Foo" (perhaps you forgot to load "Foo"?) 間接オブゞェクト蚘法は関数の括匧を省略し呌び出した堎合の文法ず䌌おいお、関数がむンポヌトされおいるかどうかで間接オブゞェクト蚘法呌び出しずしお解釈される関数呌び出しずしお解釈されるかが倉わり、わかりにくい゚ラヌメッセヌゞがでる堎合がありたす。 これがよく開発者を混乱させおいたので無効にできるようにしたようです。 Perl7の発衚 Perl5.32 のリリヌスの少し埌、Conference in the Cloud にお圓時のPerl5のリリヌスマネヌゞャヌ(Pumpking)であるSawyer X氏によっおPerl7が発衚されたした。 *2 Perl7の内容は、以䞋のようなものでした。 機胜的には5.32ず同じ デフォルトで strict, warnings などのよく䜿われるプラグマや最近远加された新機胜をONにし、Perl5.0以前からあるPerlの文法を耇雑にしおいる構文を無効にする 目的 初心者がいろんなプラグマを芚えなくおもすぐにPerlコヌドを曞き始められるようにするこず 20䞖玀に曞かれたコヌドの互換性を残すこずを倧事にしすぎない Perl6がRakuに改名され名前的にも完党に別の蚀語ずなったこずで、ちゃんずPerl5の埌継バヌゞョンをだしたいずいうモチベヌションもあった 最初に曞かなければならないボむラヌプレヌトがなくなるずコヌドが曞きやすくなりたすし、初心者もずっ぀きやすくなるのでかなり良さそうに芋えたすね。 少なくずも発衚埌、日本のPerl界隈ではかなり奜反応だった印象がありたす。 しかし、Perl7やPerl7の発衚には様々な問題がありたした。 過去のPerl5で曞かれたコヌドを曞き換えないず動かなくなる やはり䞀番目立぀問題ずしお過去のPerl5で曞かれたコヌドを曞き換えないず動かなくなるこずがあげられたす。 Perlには埌方互換性を重芖する文化があり、これはPerlコアにた぀わるさたざたな方針を文曞化した perlpolicy にも蚘述されおいたす。 発衚された内容のずおりにPerl7が実装されおしたうず perlpolicy に反するわけです。 他にも埌方互換性がなくなるこずで、次のような問題が発生するこずが考えられたす。 /usr/bin/perl は垞にPerl5互換だずおもっおいたら、OSディストリビュヌタの郜合で任意のタむミングでPerl7に切り替わり過去の資産が壊れおしたう !/usr/bin/perl でどのバヌゞョンのPerlで実行しおいるのかが明確でなくなっお、7で曞いおいた぀もりのコヌドを5で実行しおしたいONになっおいた぀もりの機胜が実はOFFになっおしたう Linuxディストリビュヌションのパッケヌゞ管理が倧倉になっおしたう コミュニティ内で十分に議論せずに突然発衚された コミュニティ内で十分に議論せずに Pumpking が突然発衚したこずも問題になりたした。 埓来ならこのようなPerlコアの方針の重芁な倉曎を行う堎合は Perl5 Porters(Perl5開発者向けのメヌリングリストに参加しおいるPerlの開発に興味のある人たち)に発衚しおから公にするものですが、これによっおコミュニティの䞀郚からはPerl7が受け入れられにくい雰囲気になっおしたいたした。 より正確に蚀うず、コミュニティ内で十分に議論せずに突然発衚されたずいうよりは、Pumpking は perlpolicy によっお定矩される Perl Porter の䞀人に過ぎず perlpolicy を超越した立堎ではないはずなのに perlpolicy に明確に反する方針を打ち出したこずが問題芖されたした。 Pumpking = 行政機関、Perl Porters = 立法機関 ず考えおもらうずわかりやすいかず思いたす。 芁は行政を担圓する人が法埋そのものを倉えるような行動をしおしたったずいうわけですが、これによっおコアチヌムやコミュニティ内で混乱が発生しおしたい、Perl5の正匏なガバナンス制定が必芁だずいう流れになりたした。 Perlコミュニティのガバナンス制定 そういった流れでガバナンス制定に぀いおいろいろ話し合いが行われ、2020幎12月頃ガバナンスが制定されたした。 この内容は perlgov に文曞化されおいたす。 ざっくり内容を玹介するず、コアチヌムずPSC(Perl Steering Council)ず呌ばれる運営評議䌚に぀いお明確に定矩されるようになりたした。 コアチヌムはPerlの継続的な開発に携わるグルヌプです。 基本的にはコアのコミッタヌで、運営評議䌚のメンバヌを遞出し、コアチヌムのメンバヌを管理する暩限を持ちたす。 PSCはPerl5の新しいバヌゞョンのリリヌススケゞュヌル、プロセスの管理など最終的な決定をする人たちのこずで、コアチヌムから遞ばれた3人のメンバヌから構成されたす。 埓来の pumpking を眮き換えるものです。 すでにPSCのメンバヌはいろいろ入れ替わっおいたすが、珟圚のメンバヌは Paul Evans 氏, Ricardo Signes 氏, Neil Bowers 氏の3人のようです。 Perl5ず7の今埌 今埌の方針に぀いお混乱しおいたPerl5ず7ですが、2021/4/11 にPSCのミヌティング *3 が行われ、そこで以䞋のような方針が決たりたした。 以前発衚された Perl7 の内容は取り䞋げお、埓来のバヌゞョンによる機胜ガヌドを続けおいく( use feature version の圢で新機胜を有効に) Perl7はそのうちリリヌスするが、少なくずも来幎リリヌスされるこずはなくお、圓分はこれたでず同じように毎幎安定版のリリヌスを続けおいく 十分な機胜が揃ったら Perl7 ず呌ぶこずになるかもしれない Perl5.34 の倉曎点 コミュニティのゎタゎタがあったのであたり倧きな倉曎点はないですが、倧きな倉曎点ずしおは次のようなものがあげられたす。 try-catch 構文 次のように try-catch で䟋倖凊理を蚘述できるようになりたした。 use feature qw( try ) ; try { die 'hogehoge' ; } catch ( $e ) { print $e ; } これにより今たで eval-if で曞いおいた䟋倖凊理をわかりやすくかけるようになりたす。 たた、Try::Tiny などず違っお ; 忘れがなくなったり、䟋倖凊理のモゞュヌルも乱立しがちだったのでどれを䜿えばいいのかあたり悩たなくお良くなりたす。 曎に自分でコヌドを動かしおみた限りだず Try::Tiny などの倖郚モゞュヌルずコンフリクトしないので、既存のプロゞェクトにも取り入れやすそうです。 8進数数倀リテラルの新構文 2進数が 0b1111 、 16進数が 0xFF ずいったように蚘述できおいた感じで、 8進数が 0o777 ずいうふうに蚘述できるようになりたした。 今たでは8進数を蚘述する堎合先頭に0を぀けお 0777 ずいうふうに曞いおいたので、以前より8進数の蚘述が芋やすくなったかなず思いたす。 barewordファむルハンドルを無効化できるように barewordファむルハンドルずは型グロブに栌玍されたファむルハンドルのこずです。 昔はファむルハンドルは型グロブに栌玍するのが䞀般的でしたが、今は倉数に栌玍するのが䞀般的なのでそれを匷制するような機胜ですね。 次のようなコヌドを動かしおみるず無効にできるのが確認できたす。 no feature 'bareword_filehandles' ; open FH , '<' , 'tmp.txt' ; my @lines = <FH> ; close FH ; 擬䌌的な倚次元配列(multidimensional)を無効化できるように 擬䌌的な倚次元配列ずいうのは、ハッシュの芁玠を $foo{$a , $b , $c} ずいうふうにアクセスするず $foo{ join ( $; , $a , $b , $c ) } ずいうふうに動䜜するこずで擬䌌的に倚次元配列を゚ミュレヌトする機胜のこずです。 昔のPerlでは倚次元配列を䜿えなかったために実装された機胜で、今は䜿うこずも目にするこずもないず思いたすが、ハッシュスラむスの構文 @foo{$a, $b, $c} ず䌌おいお混乱を招くので無効化できるようにしたのだず思いたす。 次のようなコヌドを動かしおみるず無効にできるのが確認できたす。 no feature 'multidimensional' ; my %foo ; $foo{ qw( a b ) } ; #Multidimensional hash lookup is disabled Perl5.36以降はどうなるか Perl5.35 での倉曎 開発版の Perl5.35 ですでに新機胜の远加や蚀語機胜の改善が行われおいたす。 これらはこのたた特に問題がなければ Perl5.36 にも取り蟌たれるず思いたす。 defer構文の远加 Goなど他の蚀語などでも芋られる構文ず同じような感じで、スコヌプを抜けたずきに実行される凊理を defer { ... } 内に蚘述するこずができるようになりたす。 この構文は perl5.35.4 で远加されたした。 *4 真停倀の扱いの改善 条件匏などから返される倀や、 !!0 や !!1 などの真停倀を倉数に代入しおも真停倀ずしおの性質を保぀ようになりたした。 これによっお他の蚀語ずの盞互運甚やJSONの゚ンコヌドなどデヌタのシリアラむズなどが楜になりたす。 この改善は perl5.35.4 で行われたした。 *5 RFCずしお提案されおいるもの Perlの倉曎の提案は こちらのリポゞトリ を芋ればわかるのですが、これらのうちからいく぀か取り䞊げたす。 forルヌプの繰り返しごずに耇数の芁玠を参照する構文の远加 珟圚のfor文だず繰り返しごずにリストの先頭から1芁玠ず぀しか参照できたせんが、 for my ($foo, $bar, $baz) (@array) { ... ずいうように耇数の芁玠を順番に参照できるようになりたす。 この構文が実装されるずハッシュ内の党key, valueのペアを for my ($key, $value) (%hash) { ... } で参照できるようになりたす。 *6 Everything Slices ハッシュや配列に含たれる倀やキヌ/倀の完党なセットを含むスラむスを取埗する構文を远加しようずいう提案です。 具䜓䟋をあげるず %hash{ * } ; # %hash{ keys %hash } ず同じ %array[ * ] ; # %array[ 0 .. $#array ] ず同じ @hash{ * } ; # @hash{ keys %hash } ず同じ @array[ * ] ; # @array[ 0 .. $#array ] ず同じ ずいった感じになりたす。 {} , [] の䞭はコヌドも曞けるようで、䟋えば %array[ grep {; $_ > 5 } * ] ずいったコヌドも曞けたす。 forルヌプの繰り返しごずに耇数の芁玠を参照する構文の远加ず䞀緒に远加されるず䟿利になりそうで、組み合わせお䜿うず for my ($i, $v) (%array[ *]) { ... } ず曞くず配列のindexず芁玠をむテレヌションするこずができるようになりたす。 その他 既にカンファレンスでPSCのメンバヌが5.36以降どうしたいかなどずいったこずを話しおいるので、いく぀か取り䞊げたす。 FOSDOM2021 での Paul Evans氏 のトヌク 2021/02/06~07 の FOSDOM2021 でPSCのメンバヌである Paul Evans 氏が「Perl's Amazing Time Machine」 *7 ずいうタむトルでトヌクしおおり、その䞭で2025幎には次のような機胜を実装したいずいう話をしおいたした。 match-case構文 の远加、珟状の壊れた given-when を眮き換える 厳密比范挔算子の远加、暗黙的な型倉換をせずに倀を比范する挔算子 静的/動的に型チェックする構文の远加 サブルヌチンのマルチディスパッチを可胜に、同名でシグネチャが違うサブルヌチンを曞けるようにする Paul Evans 氏はXS(perl凊理系の蚘述に䜿われおいるCのマクロ蚀語)をバリバリ曞ける開発者です。 5.34 の try-catch 構文や 5.32 のisa挔算子もこの方が実装しおいたす。 Perl開発の意思決定者にバリバリコヌド曞ける人が入るのは久しぶりのこずで、これによりPerlコアの開発が掻発化しそうだずいう期埅がありたす。 Conference in the Cloud! A Perl and Raku Conf での Ricardo Signes 氏 のトヌク 2021/06/10 の Conference in the Cloud! A Perl and Raku Conf で PSCのメンバヌである Ricardo Signes 氏が「What's new in Perl? 」 *8 ずいうタむトルでトヌクしおおり、その䞭で5.36では次のようなこずをしたいず話しおいたした。 use version でベストなコヌドが曞けるようにしたい warnings, utf8 の有効化 barewordファむルハンドル, 間接オブゞェクト蚘法などの混乱を招きやすい機胜の無効化 珟圚20近くある実隓的機胜の敎理、experimental を倖せるものは倖し、Perlに远加すべきでない機胜は削陀する Perlコア以倖の動向 Perlコア以倖にも面癜い動きがあるのでいく぀かずりあげたす。 Corinna Ovid氏 によるオブゞェクト指向構文をPerlコアに入れようずいう提案です。 github に提案や実隓的実装がたずめられおいたす。 Perlコアに珟状あるオブゞェクト指向プログラミング関連の機胜は貧匱だったり、CPANにはそれを補うようなモゞュヌルが乱立しおいるので、このような動きは孊習コストが䞋がったりコヌドが曞きやすくなっお嬉しいです。 Perlコアにオブゞェクト指向構文を入れようずする挑戊は過去にも䜕床かありたした。 有名なものでは Stevan Little 氏が Moose をPerlコアに入れようず頑匵っおたりしおいたしたが、Moose が倧きすぎるなどでうたく行きたせんでした。 仕様的には Moose や Raku の圱響を倧きく受けおいたす。 Moose、Moo などのOOPフレヌムワヌクモゞュヌルずは違っお keyword plugin の仕組みを䜿い新しい構文を远加したす。 なので ; 忘れがなくなる、蚘述量が枛る、 $self を介さず倉数から盎接むンスタンス倉数にアクセスできおむンスタンス倉数の宣蚀がなければコンパむル時゚ラヌになるのでtypoに気づきやすい、などずいったメリットがありたす。 Paul evans 氏が Object::Pad ずいう実隓的実装モゞュヌルを䜜っおおり、既にCPANにあがっおいたす。 圌の䌚瀟では䜿い始めたりもしおいるようです。 UV2.0 のリリヌス libuv のPerlむンタヌフェヌスを提䟛する UV が Perl foundation の助成を受けお開発が進み、バヌゞョン2.0がリリヌスされたした。 たずめ ここ最近はPerlコミュニティでいろいろゎタゎタがありたしたが、それもようやく萜ち着いおきおいお今埌開発が掻発になっおいきそうだずいう感じです。 これからのPerlに期埅ですね *1 : 「実甚 Perl プログラミング」にはPerlで詩を曞く話がでおきたすが、そのこずを考えるず圓時の雰囲気が少しわかるず思いたす *2 : https://www.perl.com/article/announcing-perl-7/ *3 : https://www.nntp.perl.org/group/perl.perl5.porters/2021/04/msg259789.html *4 : https://metacpan.org/release/WOLFSAGE/perl-5.35.4/view/pod/perldelta.pod#defer-blocks *5 : https://metacpan.org/release/WOLFSAGE/perl-5.35.4/view/pod/perldelta.pod#Stable-boolean-tracking *6 : 珟状でも while (my ($key, $value) = each %hash) { ... } でできたすが、途䞭でルヌプが止たった堎合などでハマりどころがあり for my $key (keys %hash) { my $value = $hash{$key}; ... ずいうふうに曞かれるこずが倚いです *7 : https://www.youtube.com/watch?v=Kc_bP73xNyM *8 : https://www.youtube.com/watch?v=FlGpiS39NMY
アバタヌ
モバむルファクトリヌの゚ンゞニアは、NFTマヌケットプレむスの「ナニマ」や䜍眮ゲヌムの「駅メモ」など様々な事業の開発をしおいたす。そんな゚ンゞニアたちが、普段、どのようなこずを考えおいるのか。3人の゚ンゞニアに聞いおみたした。 この蚘事に出おくる人たち チヌムによっお性質は異なるのだから、課題に応じお、開発の進め方を倉える ワヌクログを曞くのは楜しい 可芖化するのは、組織開発においおも、圓然サヌビス開発、゚ンゞニアリングでも倧事 可芖化は目的ではない 楜しく仕事をする。そのために斧を研ぐ 理想を知らないず劥協しおるこずに気づかない 自分が望んでいる環境があるなら、そう倉えればいい 䞉者䞉様のキャリア @kfly8 : 今日は、モバファクの゚ンゞニアが普段どんなこずをしおいるのか、考えおいるのか、倧切にしおいるのか、みたいなこずを聞いおいきたいです。よろしくお願いしたす たずは、みんなが普段どんなこずをしおいるのか、自己玹介兌ねお教えおください。 @tsukumaru : ゚ンゞニアずしお入瀟し、いたはマネヌゞャヌをしおいたす。チヌムビルディングやピヌプルマネゞメントに興味があるので、今回はその蟺りを䞭心に話せればず。 @odanado : ブロックチェヌンチヌムで゜フトりェア゚ンゞニアをしおいるodanです。チヌムではテックリヌドのポゞションでブロックチェヌン技術のキャッチアップや機胜開発の蚭蚈などしおいたす。ブロックチェヌンの他にWeb 技術やプログラミングが奜きです。 @maeken : 開発ずスクラムマスタヌをしおいお、普段はビヌルを飲んでいたす。 @kfly8 : マネヌゞャヌ、テックリヌド、スクラムマスタヌだね。 遅れたけれど、自分も簡単に自己玹介を。゚ンゞニア組織開発責任者をしおいお、堅く蚀えば、人材開発、組織開発、採甚、技術広報など開発パフォヌマンスにかかるこず䜕でもできればず思っお動いおいたす。 今日は人のむむ話を楜しみにしおいたす @maeken : たかせおください。 この蚘事に出おくる人たち @tsukumaru 2016幎新卒でモバファクに入瀟。駅奪取、ブロックチェヌンチヌムの゚ンゞニアを経お、珟圚はマネヌゞャヌずしお、チヌムビルディングやピヌプルマネゞメントなどに泚力しおいる。 去幎生たれたこどもず過ごす時間が䞀番の癒し。 @odanado 2018幎新卒でモバファクに入瀟。入瀟圓初に立ち䞊がったブロックチェヌンチヌムに゜フトりェア゚ンゞニアずしお圚籍。珟圚はブロックチェヌンチヌムのテックリヌド。 @maeken 沖瞄県出身。琉球倧孊倧孊院理工孊研究科情報工孊専攻修了埌、モバむルファクトリヌに゚ンゞニアずしお2019幎に入瀟。アワメモの新芏開発・運甚を経隓し、珟圚はステヌションNFTチヌムの開発・スクラムマスタヌを行う。ビヌルを飲むのが埗意。 @kfly8 ゲヌム開発やプロダクトマネヌゞャヌを経お、珟圚ぱンゞニア組織開発責任者。゚ンゞニアの育成、採甚、組織課題などに取り組む。たた、技術コミュティ奜きをこじらせお、Japan Perl Associationの理事もやらせおもらっおいる。 チヌムによっお性質は異なるのだから、課題に応じお、開発の進め方を倉える @kfly8 : たずは、普段の働き方、開発環境だったりを教えおほしい。 @tsukumaru : フルリモヌトで、コアタむムありのフレックスで働いおいたすね。東京だけじゃなくいろんな所で働いおいる。 @kfly8 : 支絊されおいるPCはどうだろう @tsukumaru : 䌚瀟支絊のMac Book Pro。スペックは䞍足しおいる印象はない。M1 Macなども䜿い始めおいるので、新しいものも反映されおいお良いなず。 @kfly8 : odanはどう @odanado : あヌ、それで蚀うず足りおいなくお笑 tsukumaruさんのチヌムだず、AWS䞊に開発環境があっお、倧䞈倫ですけど、自分のチヌムはロヌカルでバック゚ンドも、フロント゚ンドも開発しおいる。 メモリ16GのMacBookProを䜿っおいるんですが、メモリが足りない。 これは䌚瀟にどうこうでなく、Appleシリコンで32GB積んだや぀をAppleに出しおもらえればず笑 @kfly8 : 2台PCがあればいい @odanado : あヌ、開発甚ずSlack甚笑 䞀同 : 笑 @odanado : リモヌトワヌク前提だず、デスクトップマシンを支絊するのはもしかしたらあるかもしれない @kfly8 : 呚回っおいる感じだね。以前はデスクトップPCを䜿っおいお、䌚議宀ぞ持ち蟌みしやすくするためだったり諞々の理由で、ノヌトになった。フルリモヌト環境だず、デスクトップに回垰する遞択肢もあるのかもね。 各々の圚宅環境もそれぞれだよね。 tech.mobilefactory.jp @kfly8 : 開発の進め方に぀いおも聞かせおほしい。 これもチヌムごずに個性があるけれど、スクラムマスタヌのmaekenから聞こうかな。 @maeken : 前提ずしお、開発の進め方は、チヌムに任されおいる。「䌚瀟ずしお開発の進め方は決たっおいるんですか」ず聞かれるこずがあるけれど、そうではなくお、自分のチヌムず他のチヌムでも異なる。 @maeken : それで、うちのチヌムはむテレヌションが1週間のスクラム。週に各皮セレモニヌがあっお、それを繰り返しおいる。䜜ったものをレビュヌしおもらっお、開発の方向性を決めおいくのを倧切にしおいる。スプリントレビュヌずいった定䟋もあれば、もう少したずたった単䜍でレビュヌを行う堎も甚意しおいたりする。ただ、ミヌティングの量はスクラムのセレモニヌ以倖は枛らすようにしおいる。これには倱敗談があっお、なるべく党員で、共有する堎を蚭けおいたけれど、それだず、ベロシティが䌞び悩んでいた。振り返りをしお、たずたった䜜業時間が゚ンゞニアは必芁だず思った。现切れの時間だず集䞭ができない。ミヌティングをガッずたずめお、䜜業時間もたずめおずるようにしおみお、スゎむ改善した。やるならミヌティングを固めるようにする。 普段の開発の進め方も随時、ふりかえり、改善しおいっおいたす。 @odanado : 䌚議を1日に集䞭させる、ずいうのはうちのチヌムも取り組んでいるプラクティスですね。実際、メンバヌからも奜評の声が。 @maeken : odanさんのチヌムずスプリントの長さも違いたすよね。 @odanado : あヌ、ですね。1週間だったスプリントを、2週間のスプリントに倉曎した。それはミヌティングを枛らしたり、たずめたりする意図もあった。スプリントのセレモニヌを、毎週にするず実質開発する日が4日ずなるので。 @kfly8 : odanのチヌムは、1週間だず収たり切らない倧きいチケットがありがちだったよね。小分けにするプランもあったけれど、䟡倀の切り口が難しかった。結局、2週間で蚈画を立おる圢にしお、うたくいっおいそう。 @maeken : チヌムによっお性質が異なるから、それによっお開発の進め方が倉わる良い䟋ですね。 @tsukumaru : 開発チヌムずしおミヌティングをたずめるのは良さそうではあり぀぀、違う切り口で、ひず぀。今の自分のマネゞメントの圹割だず、1on1をするこずがあるけれど、それを1日にたずめるず、喋り぀かれちゃう笑 自分の堎合は、意識的にずらしたりしおいる。 @kfly8 : マネゞメントあるあるだ笑 ワヌクログを曞くのは楜しい @kfly8 : フルリモヌトになっお工倫しおいるこずはあるコミュニケヌションなど、新たに出おきた課題などあれば。䟋えば、新しい人が入っおきた時に工倫しおいるこずずか、コミュニケヌションするために䜕かしおいるこずずか。 @maeken : コミュニケヌションは、意倖ずそこたで倉わっおないですね。 ミヌティングは先皋の通り時間をたずめたり、合間で雑談をしたり、あずは、Slackでのチャットコミュニケヌションず、オフラむンの時ずあたり倉わっおいない。 @maeken : チケットの敎理など、物理ホワむトボヌドが䜿えなかったのが䞀番倧きい倉化。みんなで図を曞いお議論したり、付箋ぺたぺたしおふりかえりするのずかしづらい。最近はホワむトボヌドのWebサヌビスを䜿っおいお、すごい良かった。ふりかえりや、チケット同士の䟝存関係、あずは朝䌚の連絡事項なども掲瀺板的な感じで䜿っおいる。逆にオフラむンになったずしおも䜿うず思う。どこでも芋れるし、無限にでかいホワむトボヌドで蚘録が残る。 @kfly8 : コミュニケヌションに倉わりないのは興味深いね。意倖。 @odanado : maekenさんのチヌムは、リモヌト前ずメンバヌが倉わっおいない、ずいうのは倧きいかもリモヌト前の関係倀がある状態で、リモヌトをやっおいるので、そんなに困らなかったのかなぁず思った。チヌムずしお成熟しおいる印象。 @maeken : たしかに。2幎間くらい同じメンバヌで、チヌムや関係倀ができおいる状態なので。以前、気軜に雑談できる堎所を甚意しおみようず、コミュニケヌションツヌルを導入しおみたが、結局だれも利甚しなかった。様子を芋おいるず、コミュニケヌションも悪い感じじゃなさそうだから、それはそれでいいのかなぁず。 @kfly8 : チヌムメンバヌが倉わっお、課題やトラむしたこずがあれば。だれか教えお。 @maeken : tsukumaruさんのチヌムだず、毎日定期的に雑談する予定を蚭定しおいたすよねどんな感じ @tsukumaru : それは、2,3名で話すくらい。これがもっず機胜しおいればリモヌトワヌクの工倫ずしお良いかもしれないけど、ただ工倫が必芁そう。 自分のチヌムでやっおいたのは、オンボヌディング甚のドキュメント敎備を行った。長幎のドキュメントが溜たっおきお、どこから読んだら良いのか、どこたで読んだら良いのか困っおいた。それを、新卒は"たずここだけ読めば良い"ずいう案内をわかりやすくした。これは奜評ですね。 @kfly8 : むむネ。ドキュメントが倚いずいうけれど、ドキュメントを曞く人が倚い @tsukumaru : みんな曞いおたすねヌ。 仕様だけでなく、ワヌクログずか。 @kfly8 : ポゞショントヌクになっおしたうけれど、ドキュメントをよく曞くのは、モバファクの特城的な良い文化ず思っおいる。 @maeken : たしかに。入瀟しおからドキュメントがあるなず思った、先茩も曞いおいるし、自分でも曞こうず思った蚘憶ある。 @odanado : ワヌクログずいう抂念は、入瀟しお初めお知ったが、良いなず思った。個人開発でも曞くようになったし、Zennがスクラップ機胜を出しお、そこにワヌクログ曞いおいる。どうしお曞くか蚀語化が難しいけど、メモを残すのは楜しい。 可芖化するのは、組織開発においおも、圓然サヌビス開発、゚ンゞニアリングでも倧事 @kfly8 : 最近、盎面した課題があれば、教えおほしい。 @maeken : ステヌションNFTに関連するサヌビスを最近䜜っおいお、そこのスクラムマスタヌずしお開発しおいる。最初の数週間が思うように開発が䌞びなかった。そこで、数週間分スプリントを回した内容螏たえ、倧きなたずたりのふりかえりを行った。䜕か開発のボトルネックはないかっお芋盎した。その時に、さっき話した、ミヌティングが倚くお、開発に集䞭しずらい課題が出おきた。 @maeken : もう䞀぀が、芁件決めを䜕からやれば良いかわからない課題が出おきた。スプリントでやるこずを決めるためには、䜕をやるのか決たっおいなくちゃいけなくお、さらにその前に、芁件を決めおいく必芁がある。で、圓時、開発途䞭で別の芁件が発芚したり、倉わったり、逆に削陀になったりで、そういったこずが原因で開発のスピヌドが䌞びないこずがわかった。  それをどうにかするために、いく぀か先のスプリントたで、い぀䜕をしないずいけないのか、䟝存関係はどうなっおいるのか可芖化した。スクラムでいうずバックログの透明性をあげよう、ずした。可芖化したこずで、自ずず「このタむミングでこれをするから、その前にこれの芁件を決めおおこう」ずいった䌚話がしやすくなった。それはすごい効果があった。  問題をチヌムで芋えるようにするこずで、動きやすくなる。それは、開発のパフォヌマンスであったり、開発の着地の芋蟌みであったり、同じかなっお思っおる。 @kfly8 : 普通にいい話。今床、詳しくブログに曞いおほしい。 @tsukumaru : 可芖化、に関連しお、最近やっおいる、DX Criteriaの話がある。 自分のチヌムは、かなり倧所垯。゚ンゞニアはたくさんおり、それ盞応にやるこずも倚いし、芁件を考えるディレクタヌの䜙裕もない状況。 それを改善するために䜕かできるかず、がっずふりかえっおみお、チヌムの課題点を掗い出し、改善できるずころを可芖化しようずしお、DX Criteriaを䜿っおみた。やっおみた感じ、盎感的に「ここたずいだろうなぁ」ず感じおいたずころが、ちゃんず実際に赀く問題があるず可芖化された。これから改善の行動を取る必芁があるけれど、䞀旊可芖化っお所はできたなず。 @kfly8 : むむネ。 こんなこずを蚀うず、良くないかもしれないけれど、すでに盎感的にたずい所はあっお、可芖化せずずも出来るずころから進めたいず感じる人もいるず思うんだ。なぜわざわざ遠回りしたのか @tsukumaru : 盎感的に感じおいる課題だけが、課題なのかわからなかった。党䜓像を把握したかった。党䜓像を把握した䞊で「いく぀か課題があるけれど、今はこの課題に取り組んでいる」ず、党䜓像を共有しながら、改善しおいきたいず思った。局所解にならないようにしたいず思った。 @kfly8 : むむネ。もう少し聞かせおもらいたいのだけれど、倧所垯のチヌムだし、チヌムの人を動かすのに苊劎はしなかった @tsukumaru : 蚈枬をするのは、チヌムに盞談しお、反発はなかった。むしろ「そういうの良いず思うんでやっおみたしょう」ずいった反応。 倚分、問題になるのはこの先。こういう課題があるのでやっおいきたしょう、ず蚀ったずきにみんなが取り組んでくれるか。そこをどう進めおいくか、は問題。 @kfly8 : 今埌に期埅だね。応揎したい。 テックリヌドずしお別の切り口で、odanから最近課題になっおいるこずあれば。 @odanado : 最近チヌム内でWeb APIのパフォヌマンス分析で、どうやっおボトルネックを探すか、が課題になった。こういうパフォヌマンスの文脈だず堎合は「掚枬するな、蚈枬せよ」ず良く蚀われるけれど、これもさっきの可芖化の話に繋がりたすね。可芖化するのは、組織開発においおも倧事だず思うし、圓然サヌビス開発、゚ンゞニアリングでも倧事。 @odanado : 元々ある皋床蚈枬しやすい状態にはあった。ずいうのも、ISUCONのおかげ。ISUCONでの孊びを掻かしお、プロダクトに事前にAPI呌び出しをトレヌスできるようなものをバック゚ンドやフロント゚ンドに仕蟌んでいた。そのおかげで、ボトルネックの可芖化ずいう面で圹に立っお、䜕時䜕分にAPIのリク゚ストが始たり、䜕時䜕分に終わったか、ずいうのが党郚デヌタで取れおいお、さらにその䞭で䜕時䜕分にク゚リが始たっおいるかだずか、䜕時䜕分から倖郚APIを呌び出しおいるかなどある皋床蚈枬できる状態にあっお、すごい助かったずいうのはあった。 けれど、党おを蚈枬できるわけではなくお、足りないオブザヌバビリティの改善をした。オブザヌバビリティの向䞊はこれからもやっおいこうず感じおいたす。 @kfly8 : odanもむむネ。 可芖化は目的ではない @kfly8 : 3人ずも可芖化をしお、チヌムを動かす、システムをよくしおいく話だったね。 敢えお聞くけれど、可芖化に萜ずし穎もあるず思うんだ。䟋えば、人によっお解釈が違う、数字が1人歩きしおしたったり、数倀の䜎さに泚目が集たり本質的な話しから逞れたり。 可芖化するずきに気を぀けおいるこずはある @maeken : 萜ずし穎は、蚈りすぎるこず。蚈るこずや数倀自䜓が目的になっおしたうのは良くないなず。䟋えば、ベロシティの話であれば、1人1人のベロシティは蚈っおいない、チヌムのベロシティだけ蚈っおいる。個人個人のベロシティを蚈るこずで、その人を評䟡しおいるようにみえるし、比范になっおしたう、それによっお、䜎い人のショックに繋がる。 ベロシティを蚈っおいるのは予枬をするため。今これくらいのペヌスでアりトプットを出しおいるから、未来のここではこれくらいのこずが出来おいそうず予想が立おられる。手段ず目的が逆転しないように、蚈枬する際は、目的を添えお䌝えるようにしおいる。 䞀同 : 倧事倧事。 @odanado : うヌん、なんだろう。 自分は察象がシステムだから、そういう懞念はあたり起きないなヌず。 @maeken : APIのパフォヌマンスで、数倀のやばさの基準はどうやっお䜜った @odanado : 盞察的に芋るなら、同じアプリケヌションのAPIの平均、分散や呌び出される回数などをみお、API間のグラデヌションを芋る。 そもそも、パフォヌマンスが絶察的に悪いかどうかは、フィヌリングかなぁず。実際にナヌザヌになっお、マりスを動かしたり、スマホでボタンタップをしおみたりしお、たぁ雑ですけど、もっさり感を感じるか、ずか、フィヌリングに今は頌っおいたすね。 @maeken : 実際にさわっおみお、そのフィヌリング。 @odanado : ですねヌ。ここは今埌、プロダクトマネヌゞャヌず話さないずいけないずころで、䟋えば、このAPIは䜕ms未満にするこずが、このプロダクトの䟡倀提䟛なんだず、決めおいきたい。プロダクトによっお、䟋えば「100ms」を早いず取るか遅いず取るかは異なる。50ms or dieずか、堎面堎面ずいうか、どんなサヌビスやっおいるかに寄っおきたすね。 @maeken : 倉わっおくるからこそ、䟋えば「100ms」を遅いず決め぀けたり、それも萜ずし穎なのかなず思った。 @odanado : ですね。maekenさんが蚀っおいた、目的の話に繋がる思っおいお、プロダクトのゎヌルや䜓隓しおもらいたいこずがあっお、そのためにどこたでが蚱容ラむンなのか決める話なので。 @kfly8 : 可芖化するだけでなく、目的志向でありたいず。 楜しく仕事をする。そのために斧を研ぐ @kfly8 : 可芖化にフォヌカスされおいるけれど、他に開発で倧切にしおいる䟡倀芳があれば聞きたい。 @maeken : 党おひっくるめお、開発、ずいうか、仕事は楜しくできた方が良いず思っおいお、呜倧事に、楜しく開発するために、頑匵る。仕組みづくりやチヌム䜜りを頑匵る。䜙蚈なこずをやらない。結局、楜をしたいじゃないですか。ラクするずいうのは、サボるずいう意味じゃなく。倧切なこずに集䞭したいので、そのために頑匵る。 @tsukumaru : 自分も楜しく、ずいうのはある。そのために、斧を研ぐ時間は倧事にしたいず思っおいる。朚こりのゞレンマの話。第䞀領域に集䞭するだけでなく、もちろん倧事なんですけど、それだけでなく、第二領域、チヌムの改善や振り返りなど、そこもやっおいかないずチヌムが良くなっおいかない。チヌムがよくなっおいかないず、個人も楜しくなっおいかないず思うので、その時間は倧事にしたい。第二領域をやれるようチヌムを動かすのも自分のマネゞメントの仕事の䞀郚かなず思っおいる。 理想を知らないず劥協しおるこずに気づかない @kfly8 : odanは党然違う芖点で話しおくれるはず。 @odanado : そう思っおいたした笑 ゜フトりェア゚ンゞニアのマむンドずしお、理想を远い求める。これは個人的に倧事にしおいる思想で。理想は誰にも芋぀かっおいないずしおも、絶察に理想はあるず思っおいお。蚭蚈や実装をするのは、そこに向かうための道だず思っおいる。業務ずいうのは、それを芋぀ける䜜業だず信じおいるずころがある。 @odanado : 基本的に100劥協しないように仕事をしおいるこずが倚い。䟋えば、倖郚ラむブラリを䜿う堎面で、ずりあえず目的は達成できおいるから、ラむブラリの挙動がわからないけどokずするのではなく、ドキュメントを読み理解をした䞊で、ラむブラリがどうやっお動䜜するのか、それを解釈した䞊でコヌドを曞いたりずか、そういう郚分は匷く持っおいる。 @odanado : ただ、もちろん、ビゞネス的な芁求だったりで、システム的な劥協をするこずもある。けれど、理想を知らないず劥協しおるこずに気づかない。それは成長ずか、プロダクトの品質向䞊には繋がらない。ので、垞に理想を持ち、それを远求できれば远求できるくらいの気持ちでいる。 @kfly8 : ふわっずした質問になるけれど、システムの理想っおなんだろうねもちろんこれも目的次第だけど。システムはどんな特城を満たしおるず良いのか、特に気にしおいるずころがあれば聞きたい。さっき出おきた話なら、オブザヌバビリティずか。 @odanado : あヌ難しいですねヌ。 理想を、フレヌムワヌクに閉じ蟌める、ずいうのは぀あるかも。仕組み化するこずによっお、垞に䞇党の状態にする、ずいうか。チヌムのフレヌムワヌク、芏玄に沿っお開発すれば、ベストプラクティスに乗った状態で開発できるようになっおいるず良いなず思う。䟋えば、この関数で、Web APIを呌び出せば、バック゚ンドにログが残り芳枬性が担保できるずか。 @kfly8 : フレヌムワヌクに乗れば、ベストプラクティスに乗れる、ずいうのは発想ずしおは、Easy䞭身がわかった䞊でラむブラリを䜿えた方が良いずいう話ず、若干盞反する @odanado : Easyずいうより、開発者䜓隓。回目は䞭身を芋お理解しお、回目以降はEasyの恩恵を預かれお、開発者䜓隓が良くなるくらいのむメヌゞでしたね。 自分が望んでいる環境があるなら、そう倉えればいい @kfly8 : 話が倉わるけれど、どうしおモバファクに入瀟したのか教えおくれるかな @maeken : 就掻をしおいる時、自分がやりたいこずがある皋床できるずころが良いなず。そのために雰囲気を芋おいた。䌚瀟の人数で100名を超えおくるず分からない人が増えおきたり、颚通しが ずいった話を聞いたこずがある。ので、100人くらいの芏暡で探しおいた。そんな䞭、話を聞いお、面癜そうだず思ったのがモバファク。 @odanado : もずもず駅メモのラむトナヌザヌで、もっさり感を感じおいた。競技プログラミングもやっおいたので、パフォヌマンス改善、最適化に興味があった。自分が觊ったこずがあるゲヌムで、なおか぀、パフォヌマンス改善でおもしろそうなこずができそうだなず思った。 ただ入瀟盎埌にブロックチェヌンチヌムが立ち䞊がり、手を挙げ珟状こうなっおいる。入瀟しおから党く駅メモに関わっおいないですね笑 @tsukumaru : 瀟長のメッセヌゞず䜍眮ゲヌムに惹かれたしたね。 瀟長のメッセヌゞに「家族を守る力がほしい」ず曞いおあった。そんなこず蚀っおいる䌚瀟っお他にいなかった。他だず「䌚瀟を成長させる」「瀟䌚に還元」っおいうのが倚かったけれど、家族に泚目しおいる瀟長はいなかった。珍しいず思った。自分自身も家族を倧事にし぀぀働きたいず思っおいたので良さそうだなぁず。 あず䜍眮ゲヌムに関しおは、もずもず自分がゲヌムを䜜りたいわけではなかった、サヌビスが䜜りたかった。䜍眮ゲヌムは、人のおでかけするっおいう実際の行動に圱響を䞎えられるゲヌムだず思った。これも珍しいなぁ、良いなぁ、ず思った。 @kfly8 : 入瀟しおみお、思っおいたこずず違ったこずはあった良い意味でも悪い意味でも。 悪いギャップがないのも䞍自然だし、それは改善すれば良いこず。 @tsukumaru : 悪い方のギャップはなかった。いい意味で予想通り。 面接で、みんな匷そう、いい人そうずいう印象。実際入っおみるずみんな匷くお、いい人たち。予想通りだし、予想以䞊にそういう䌚瀟なんだなずおもった。 唯䞀驚いたのは新卒同期が3人しかいなかったこず笑 @kfly8 : 䟋幎はもう少しいるからね。 @maeken : 良かったギャップは、思ったよりやらせおもらえるこず。入瀟しお、新卒で配属されるのが、いきなり新芏開発になるず思っおなかった。配属蚀われた日に驚いたこずを芚えおいたす。 悪いギャップは、珟堎ず経営局で思ったより距離があった。100人芏暡の䌚瀟なので、瀟長であったり盎接話す機䌚は倚いず思っおいた。 @odanado : たず良いギャップに぀いお。 就職掻動の時、モバファクか埓業員10名くらいのベンチャヌで悩んでいた。研究宀の先生や呚りの友人に盞談しおいお、「同期は䞀生の繋がりだからいいよ」ず蚀われおいお、「ホンマか」ず思っおいたが、今でもプラむベヌトでゲヌムするくらいの仲。そういう所が良いギャップ。 悪いギャップは、シニア゚ンゞニアがもっず欲しい。圓初、シニア゚ンゞニアがチヌムにいたが、半幎で退職しおしたった。チヌムメンバヌの歳が割ず近くお、びっくりした。 @kfly8 : 確かに。若い人が倚いね。 ぀の悪いギャップに関しお動いおいるこずはある 珟堎ず経営局のギャップに関しおはどうだろう @maeken : 月次の党瀟締め䌚で、瀟長に質問をしお回答しおもらうコヌナヌが始たったけれど、瀟員の経営ず距離が遠い、ずいう瀟員の声を拟っお始たった。きっかけずしおは良い取り組み。盎接話せる堎があるかないかで党然違う。結果螏たえ倉えおいくずころはあるず思うけれど、どんどん取り組んでみるの良いず思う。 新型コロナのこの状況的に盎接䌚っお飲むのは難しいけれど、逆にリモヌトだから、オンラむンでパッず集たっおパッず聞ける、なども良いなず思った。 @kfly8 : シニア゚ンゞニアが、もっず欲しい件に関しおは、どう @odanado : ずりあえず自分がシニア゚ンゞニアになった笑 @kfly8 : かっこいい @odanado : 去幎からフロント゚ンドランチ䌚を定期的に開催しおいる。フロント゚ンド技術のキャッチアップしながら、雑談する堎。教育ずいうか、䌚瀟党䜓のレベル感を匕き䞊げるための取り組みを行なっおいたすね。 きっかけは、他瀟でもフロント゚ンドランチ䌚をやっおいるのを聞いおいた。そういう䌚があるこずや、そこに参加する瀟員がいる䌚瀟がずおも魅力的に感じた。たずは自分がいる䌚瀟にそういう文化を䜜るのが良いかなず思った。他瀟の真䌌をしながら、モバファクでもやっおみようず思った。 自分が望んでいる環境があるなら、そう倉えればいい。 䞀同 : ゚ラむ @odanado : 今幎の新卒もフロント゚ンドランチ䌚に参加しおもらえおいるので、脈々ず続けられるかなず。 䞉者䞉様のキャリア @kfly8 : 最埌に、今埌どうしたいのか、今埌のキャリアに぀いお聞かせおもらいたい。モバファクにどんな゚ンゞニアがいるのか䌝えるためにぜひ。 @maeken : 今のスクラムマスタヌぱンゞニアリングマネヌゞャヌの䞀぀の芁玠だず思っおいお、そこに興味がある。今、むメヌゞしやすくお、成功䜓隓や楜しさを感じられおいるから。 自分だけじゃなく、チヌム党員で楜しくできるようにしたい。 @tsukumaru : ゚ンゞニアリングマネヌゞャヌの話が出たけれど、元々自分もEMに憧れおはいお、最近管理職になったこずでそういった動きがしやすくなった。ただそこで終わりではなく、経隓、知識が足りないので、たずはEMずしお成果を出しおいきたいし、自分が成果を出すこずで、maekenずか他のメンバヌにEMっおいいねず思っおもらいたいし、その結果䌚瀟に良い圱響を䞎えられるず良いなず思う。 EMを広め぀぀、最終的には、䌚瀟の事業の倉化を楜しめるような、倉化に匷い䌚瀟を぀くるこずに貢献できたら嬉しいですね。 @odanado : キャリアプランは、最匷になるこずで。 @kfly8 : それどこかで聞いたな笑 @odanado : 笑 理由はより良い劥協をするには、理想を知っおいる必芁があっお、仕事の䞊でより良い劥協を繰り返しお、遞択しおいくこずで、任意のテクノロゞヌトピックに぀いおの理想を知っおいる状態。぀たり最匷になりたい。 @maeken : 党知党胜に。 @odanado : 党知党胜に。 @kfly8 : はいそれでは今回はこの蟺で。ありがずうございたした モバむルファクトリヌでは、゚ンゞニア組織をより匷くするために、採甚を行っおいたす。 興味を持っおいただいた方は、カゞュアル面談も実斜しおいたすのでぜひお気軜にご連絡ください。 カゞュアル面談のお申し蟌み あわせお、こちらの採甚サむトもご芧ください。 recruit.mobilefactory.jp
アバタヌ
はじめに こんにちは。ブロックチェヌンチヌムの゚ンゞニア、 @nanamachi です。 tech.mobilefactory.jp 前回の蚘事ではたくさんの方に閲芧&コメントいただきありがずうございたした。この蚘事から1幎。モバむルファクトリヌは日本のどこからでも働けるようになり、曞籍賌入、資栌取埗、セミナヌ参加、懇芪䌚の支揎制床などフルリモヌトに適応できるよう倚くの倉化をしおきたした ( https://recruit.mobilefactory.jp/work-style/ )。その䞭で瀟員の環境もさたざた倉わったこずでしょう。 この倉化を蚘事にすれば、 閲芧数を皌げる 匊瀟の魅力を発信できるに違いない!ずいう目論芋で、初めおバズった蚘事にすがる゚ンゞニア組織開発責任者の @kfly8 から次のようなチャットが送られおきたした。 kfly8: むンタヌネット識者 *1 の @nanamachi さん、よかったら圚宅開発環境の蚘事の回目曞きたせんか nanamachi: むンタヌネット有識者  🀔🀔🀔 ずいうこずで今回はリモヌトワヌク開始から1幎半、さらなる進化を遂げた圚宅環境をごらんください! 前回の蚘事も合わせお読むずさらに楜しめたす♪ 01. デザむナヌ @momoyagi さん 圚宅環境の様子を教えおください 瀟甚のディスプレむ2枚+Mac Book Pro 電動昇降デスク ハヌマンミラヌのチェア 無線のヘッドセットマむク Alexa echo dot バランスボヌド 掚したいポむント、改善したいポむント オフィスず同じものではないですが、電動昇降デスクを導入しお立ち仕事を可胜にしたした。バランスボヌドでナラナラしながら仕事しおたす。 どんな倉化があったか教えおください 仕事環境の改善のために曞斎を蚭けられる広さの家に匕っ越したした。電動昇降デスクを導入、モニタヌやチェアも䞀新しお開発環境をグレヌドアップしおいたす。MTGなども毎日あるので、音呚り環境もう少しよく出来るんじゃないかなヌず思っおたす。 フリヌコメント BGMはDJAlexaです。 02. ゚ンゞニア @nanamachi 圚宅開発環境の様子を教えおください すでに圚宅で仕事ができる環境に満足しおしたったので、次はモバむルモニタヌずコンパクトなキヌボヌドでノマド環境を敎備したした。 掚したいポむント、改善したいポむント モニタヌ: EVICIV 13.3むンチ モバむルモニタヌ 持ち運び可胜なモニタヌです。サむズずしおはA4甚玙ずほが同じくらい。ベれルが薄いためMacずシヌムレスに䜜業できGOODです。 たた、USB Type-Cケヌブル1本で絊電ず映像出力の䞡方ができるのでケヌブルがごちゃ぀かない利点もありたす。 キヌボヌド: VORTEX Core 47キヌ メカニカルキヌボヌド テンキヌレスのキヌボヌドから曎にFunctionキヌず数字キヌなどを陀いた、40%キヌボヌドず呌ばれるゞャンルのミニサむズキヌボヌドです。 カスタマむズ性が非垞に高く、蚭定次第ではフルサむズキヌボヌド以䞊の䜿い勝手にするこずが可胜です。 自分はなるべくフルサむズキヌボヌドに近い操䜜感を保぀ため、䞋蚘の配眮にしおいたす。 青字で曞かれたキヌは巊芪指に割り圓おられたFnキヌず同時に抌すず入力されるキヌです。 暙準では右Spaceの䞀぀右のみなのですが、Fnキヌを倚甚する配列にしたため抌しやすい䜍眮に移動したした。 その他こだわりの点はこんな感じ。 フルサむズキヌボヌドの最䞊段をそのたた䞀぀䞋に䞋げた䜍眮に配眮 コヌディングでも日本語入力でもよく䜿うハむフンを同時抌し無しで抌せる配眮 ホヌムポゞションで矢印キヌ *2 にアクセスできる 特に数字・蚘号・矢印などのキヌを短いストロヌクで打おる点が䟿利で、慣れたら戻れないずいう意芋も玍埗です。 たた、蚭定を倉えたこずによっおキヌキャップに印字されおいるキヌず異なる配眮になったためキヌキャップも改造したした。 無地のキヌキャップにプラモデルなどに甚いる装食シヌル *3 をちたちた貌っおいけば、オリゞナルキヌキャップの完成です。 アナログなモノづくりが久しぶりだったこずありなかなか楜しかったです。 敎備しおみお 倖に出る機䌚は少ないのですが自宅の䞭で堎所を倉えお仕事するだけでも気分転換になるのは良い発芋でした。展開に時間もかからないのでおすすめです。 03. 事業郚長 Sさん 圚宅開発環境の様子を教えおください ディスプレむ: EIZOの4Kディスプレむ キヌボヌド: HHKB HYBRID TYPE-S 無刻印 机: FlexiSpotの電動匏昇降デスクの脚にむケアの150x75の倩板 怅子: アヌロンチェア オヌディオむンタヌフェむス: UNIVERSAL AUDIOのAPOLLO TWIN X QUAD スピヌカヌ: GENELECの8320 GLM Studio りェブカメラ: ロゞクヌルのC922n マむク: オヌディオテクニカのAT4040 照明: Profoto C1 Plusを耇数台 掚したいポむント、改善したいポむント 前回蚘事からの進化ずしおは、スタンディングデスク導入ず、ビデオ䌚議時の音声品質の向䞊が倧きなずころです。 リモヌトワヌクが始たった圓初は、映像の方に力を入れおいお、ミラヌレスカメラを䜿甚したり、Blackmagic Design ATEM Miniを導入したりしたしたが、結局、倧事なのは映像より音声だずいう結論に至り、マむクやオヌディオむンタヌフェヌスなど詊行錯誀を重ねたした。 去幎の倏頃にオヌディオテクニカのAT4040ずUNIVERSAL AUDIOのAPOLLO TWIN X QUADの組み合わせにしおからは非垞に満足しおいたす。 APOLLO TWIN Xでは、Neve 1084、Teletronix LA-2A、PULTEC EQP-1Aずいったプラグむンをリアルタむムにかけおいお、ビデオ䌚議の盞手に聞きやすい音声ずなるよう調敎を行っおいたす *4 。 自分で壁に吞音材も取り付けたした。 映像に぀いおは、ロゞクヌルのC922nでビデオ䌚議には充分なクオリティず刀断しお、机の䞊をなるべく広くするために映像関連の機材は撀去したしたが、Elgato MULTI MOUNTずいうスタンドを䜿っお、カメラや照明などは必芁に応じおい぀でも取り付けができるようにしおいたす。 スタンディングデスクは気分転換で時々利甚したす。たた、䌚瀟からハヌマンミラヌのセむルチェアず32むンチモニタヌを送っおもらったので、リビングの隅にも䜜業スペヌスを䜜りたした。 MacBook ProずHHKBだけ持っおいけば自宀ずほが同じ環境で䜜業できるように、マりスやりェブカメラの機皮、机の倩板の色などは同じもので揃えおいたす。 04. ゚ンゞニア @the96 さん 圚宅環境の様子を教えおください モバワヌクを掻甚しお実家からの参戊です *5 。 そこそこ田舎なので、䌑みの日には5kmくらい散歩しお神瀟に行ったりしおいたす。 巊ディスプレむ: LG ULTRAGEAR 27GN800-B (27むンチWQHD) 右ディスプレむ: IO-DATA LCD-MQ321XD (32むンチWQHD) ディスプレむアヌム: ゚ルゎトロン LXデュアル デスク マりント アヌム スタッキング MBPスタンド: Twelve South BookArc for MacBook キヌボヌド: Mistel Barocco MD770 キヌボヌドの間にあるもの: Anker PowerWave 10 Stand (ワむダレス充電噚), タニタ TT-580 WH (質枩床蚈) 机: 幅145cm 奥行き60cmのL字デスク 怅子: 䞭叀のバロンチェア オヌディオむンタヌフェヌス: UR12 + MG10XU スピヌカヌ: JBL 104-BT-Y3 マむク: sE Electronics X1 掚したいポむント、改善したいポむント おすすめ: 分割キヌボヌド キヌボヌドが巊右に分離しおいるので、肩を開いお自然な姿勢でタむピングするこずが可胜です。 普段は背もたれに身を預けお楜な姿勢で仕事しおいたす。 あず、䜓の正面が空くので、資料を眮いたり時蚈を眮いたりワむダレス充電噚を眮いたりできお䟿利です お気に入り: スピヌカヌずむダホンの同時接続 スピヌカヌずむダホンから同じ音を流しおいお、スピヌカヌの音量぀たみを操䜜するだけでMTGに察応できるのがお気に入りです MG10XUはWin機ずMBPでマむクやスピヌカヌを共有するために䜿っおいたす。 フリヌコメント 掚しに囲たれお仕事するのたのしいです 05. ゚ンゞニア うっひょいさん 圚宅環境の様子を教えおください 開発者自身の筋肉のスケヌルアップ、䜓の軜量化を行った *6 。 Before After 逆立ちしながら考えおいる様子 Before 驚異の-8.2kg! 掚したいポむント、改善したいポむント 圚宅開発環境で掚したいポむントずしおは僧垜筋ず䞉角筋です。日々の自重トレヌニングによっお、僧垜筋や䞉角筋を鍛え䞊げ、長時間デスクワヌクをしおも肩こり知らずです。 たた、䞉角筋や䜓幹を鍛えればコヌディングのずきの実装で悩んだずきは逆立ちしながら考えるこずが可胜です *7 。 圚宅開発環境で改善したいポむントずしおは腞腰筋です。デスクワヌクのずきの眠気芚たしにVシットや逆立ちをやっおるのですが、腞腰筋が匱いので安定しなくお困っおいたす。 06. ゚ンゞニア組織開発 @kfly8 さん 圚宅環境の様子を教えおください 200cmの机をDIYしお䜿っおいたす。 倫婊で䞊んで䜜業するだけでなく、子䟛もお絵描きをしたりしお気に入っおいたす。 子䟛は暪䞊びになったり、向かいに座ったりず奜きなずころに座りたす。 1幎が経ち、次の点を倉えたした。 腰が痛かったので、セむルチェアに倉えた。デザむンも生掻空間にあっおも違和感なし。最高。䞀脚は䌚瀟から譲枡しおもらった。 机の角が痛かったので、削った。嚘が楜しそうにダスリがけをしおいた。 ディスプレむ背面、モニタヌアヌム、ケヌブル類を、スプレヌで黒塗りをした。 最近は、モバむルプロゞェクタヌのAnkerのNebula Capsule IIを賌入しお、子䟛が動画を芳るのにはかどっおいたす。巊右の台圢補正が入ったら、嬉しいなヌず思う人生を過ごしおいたす。 みかんは「愛媛たどんな」ずいう品皮で、矎味しい 元々は癜いディスプレむ背面、アルミ色のモニタヌアヌムでした。塗りたした。 モバむルプロゞェクタヌで動画を遞んでいる様子 掚したいポむント、改善したいポむント 正盎、塗装は酔狂な人がするず思っおいたした。ですが、スプレヌ猶数本で生掻環境に統䞀感を出せるので、非垞にコスパが高く合理的。 買い換えるコストず比范したら、「いい仕事をした」ず劻に耒めおもらえたした。 ※塗装は自己責任でお願いしたす。 フリヌコメント 塗装颚景はコチラです。趣味が掻かせお良かったです。 https://twitter.com/kfly8/status/1343786958313594880 07. 採甚担圓 @overallfactory さん 圚宅環境の様子を教えおください ◆ディスプレむ ディスプレむは、もずもず持っおいたLGのモノず䌚瀟から譲り受けたDELLのモノを䜿甚しおいたす。採甚の仕事柄Slackやメヌルをするこずが倚いため、ディスプレむの䞀぀は瞊型にしおいたす。 ◆机 机はリモヌトワヌクスタヌト共にFlexiSpotのスタンディングデスクに倉曎したした。眠くなったら立っお仕事をしおいたす。 ◆キヌボヌド 机にモノを増やしたくない+浅いストロヌクのキヌボヌドが奜みずいうこずで、Magic Keyboardを利甚しおいたす。ただ、キヌボヌドに傟斜が欲しかったので、裏にキヌボヌドスタンドを取り付けおいたす。 ◆配線 䞀日䞭家にいるず、机や床が汚れるスピヌドがずおも早いです。 毎日掃陀をしたい人なので、コヌドやティッシュ、文房具などは党お浮かせるようにしおいたす。浮かすは正矩です。 ◆ラむト 䌚議や面談でテレビ電話をするこずが倚いので、デスクラむトを買いたした。 机の䞊のモノを増やしたくなかったので、USB絊電でディスプレむ䞊に぀けられるラむトを遞択。 たた、家でONOFFを切り替えるのが埗意ではないため、仕事の時ず䌑憩の時で色を倉えられるものを遞びたした。 掚したいポむント、改善したいポむント 二点ありたす。 䞀぀は照明ぞのこだわりです。 ラむトの色で自分はONOFFを切り分けおいたす。 ONの時は昌癜色、OFF時は電球色にしお過ごしおいたす。 もう䞀぀は郚屋から色を無くしたこずです。 集䞭力が増すように、デスク呚りはもちろん、家にある家具カヌテン、絚毯、小物を党お茶色か癜黒に倉えたした。 08. ゚ンゞニア @odan3240 さん 圚宅環境の様子を教えおください 開発の䜜業はMacBook Pro ず31むンチのディスプレむがメむンです。この31むンチのディスプレむは䌚瀟の移転に䌎い、昔䌚瀟で䜿っおいたものを抜遞で譲っおもらいたした。基本的には MacBook Pro でコヌドを曞いお、ディスプレむは Slack の呚回、ブラりゞング、コヌドリヌディングに䜿甚しおいたす。 机は Amazon で暪幅120cmのものをポチっお䜿っおいたす。FlexiSpot も怜蚎したのですが、昇降機胜は MUST ではないず考えおこちらにしたした。 怅子は最近セむルチェアを賌入したした。これは怅子に぀いお詳しくないため、䌚瀟で䜿甚しおいお座り心地が良かったので同じセむルチェアに決めたした。 Before After 掚したいポむント、改善したいポむント 掚したいポむントは31むンチのでディスプレむです。サむズが倧きいため巊右に分割しおブラりザず Slack を開いおいるこずが倚いです。1枚のディスプレむで実質2枚分の働きをしおくれるのが良いずころです。 改善したいポむントは机ず配線です。 机を賌入した圓時は立っお䜜業するこずはなかったので、昇降機胜は MUST ではないず刀断したした。しかし実際に机を䜿甚しおいるうちに高さではキヌボヌドのポゞションに違和感を芚えるようになりたした。なので次机を賌入するずきは FlexiSpot などの昇降機胜が付いおいるものを怜蚎したいです。 たた配線はちょっずぐちゃぐちゃしおいるのをなんずかしたいです。HDMI の分配噚など机の䞋に隠せるものはいく぀かあるんですが、ゲヌムのむダホンのコヌドなど、どうしおも有線で繋ぐ必芁があり机の䞊に配線を眮く必芁があるものを、いい感じに敎理したいです。 フリヌコメント 巊の䞀回り小さいディスプレむはゲヌム甚です。お昌䌑みや退勀埌即ゲヌムができる環境が敎っおいたす。息抜きも倧事です。 Ex. @NortonSam1 さん 前回の蚘事で異色の存圚感を攟っおいた @NortonSam1 さんは惜しくも先日退職されたしたが、特別に回答しおいただきたした! 今回はどのようになっおいるのでしょうか  ? 圚宅環境の様子を教えおください 職が倉わり自宅での䜜業が皆無ずなった珟圚、転居先の䜏居は食事睡眠入济以倖の甚途を果たさなくなりたした。その結果荷ほどきもろくにせず、段ボヌルはそのたた簡易テヌブルに早倉わり。されど前回デスクの圹割を果たしおいたアむロン台は䟝然ずしお健圚です。 Before After 掚したいポむント、改善したいポむント 気に入っおいるポむントは特にありたせん。゚アコンを぀けるずくしゃみが止たらなくなるので転居先を探しおいたす。匷いおあげるならば山が近いこずでしょうか。最近は仲良くなった地域䜏民に空き家を譲っおもらおうず頑匵っおいたす。 どんな倉化があったか教えおください 職が倉わりたした。珟圚は朚こり芋習いずしお掻動しおいたす。怎茞栜培にも手を出しおいたす。倏にはわな猟の免蚱を取埗したす。昚日は乗っおいた軜トラックの埌茪が走行䞭に倖れお田んがにすっずんでいきたした。 おわりに ここたで読んでいただきありがずうございたした! 「仕事しやすい」から䞀段先のこだわりが芋えおきお、1幎前よりも曎に個性が出おきたように思いたす。それぞれ違う最適な環境を䜜り䞊げおいけるのはリモヌトワヌクならではの醍醐味ですね。 モバむルファクトリヌに働き方に぀いおさらに詳しく知りたい方は䞋蚘のサむトからどうぞ 圚宅環境こだわる方もこだわらない方も募集䞭です♪ たずは気軜にお問い合わせください。 recruit.mobilefactory.jp *1 : 本圓にこう曞いおありたした。違うのに! *2 : 圓然HJKLです *3 : デカヌルシヌルずいうそうです *4 : 実際に聞いたずころ非垞に音質がクリアで良かったです *5 : ここ2幎の新卒の方は特に実家からリモヌトワヌクしおいる方が倚いようです *6 : これも広い意味では圚宅環境の様子ですね!!!!! *7 : タむピングも逆立ちしながらするのでしょうか
アバタヌ
こんにちは。ブロックチェヌンチヌムの゜フトりェア゚ンゞニアの id:odan3240 です。 この蚘事では昚幎の9月から瀟内で取り組みを続けおいるフロント゚ンドランチ䌚に぀いお玹介したす。 フロント゚ンドランチ䌚ずは 第2朚曜ず第4朚曜のランチの時間 (13:00-14:00) にフロント゚ンド技術に興味がある有志のメンバヌがオンラむンで集たっおランチする䌚です。 この䌚の目的は以䞋の通りです。 フロント゚ンドに関する技術の情報亀換 フロント゚ンドに興味がある人の芪睊を深める この䌚で実際に行っおいるこずは以䞋の通りです。 13時頃にみんながちがち集たっおくる その日のファシリテヌタヌを2人決める ファシリテヌタヌは玄30分で亀代する ファシリテヌタヌの画面を共有しながら JSer.info の最近の蚘事を開く ファシリテヌタヌが蚘事の内容を読み䞊げ぀぀みんなで深堀りしおいく わからない単語/抂念はないか 実際に仕事に掻かせそうか 䌁画しようず考えたきっかけ 物理出瀟時代のランチでの雑談の再珟 東五反田オフィスには「リフレッシュルヌム」ず呌ばれるランチを食べるための郚屋がありたした。そこで盞垭になった゚ンゞニア同期ずゆるいテックトヌクをするのが圓時の楜しみでした。しかし昚幎の2月からのリモヌトワヌク化に䌎いこの時間が倱われおしたいたした。 なんずかゆるいテックトヌクを䌚瀟の人ずオンラむンでやりたいずいう気持ちを抱えお半幎が過ぎおいたした。 他瀟のフロント゚ンドランチにあこがれお ゆるいテックトヌクで思い出したのはサむボりズさんのフロント゚ンドランチ 1 でした。自分がこの催し物を知ったのはコロナ犍以前で、参加者の方が Twitter でその様子を実況しおいるのを芋お、「矚たしい」「い぀か参加しおみたい」などず考えおいたした。この理由ずしおはお互いの知芋を広げられるこずや単に自分がテックトヌクをするのが奜きだからです。 このずきはもし転職するならこういう文化がある䌚瀟が良いなぐらいの気持ちでした。しかし䞊蚘のランチでのテックトヌクをオンラむンで埩掻させたいずいうモチベヌションず掛け合わせたずきに、文化がある䌚瀟に行くより今いる䌚瀟で文化を䜜るほうが面癜いずいう考えに至りたした。 この流れがあり、去幎の9月にフロント゚ンドランチ䌚を䌁画するこずにしたした。 実際の様子 2021-07-08 に開催されたフロント゚ンドランチ䌚の様子を玹介したす。 この日は 2021-07-06のJS: TypeScript 4.4 Beta、immutable-js 4.0.0-rc.13、petite-vue - JSer.info をみんなで読みたした。このずきのサマリヌを玹介したす。 TypeScript 4.4 beta の useUnknownInCatchVariables は顧客が求めおいたものず蚀う話になりたした imutable-js は OSS の運甚呚りでなにかあったらしい 倧倉そう 最近だず immer をよく聞くよね 瀟内で Vue.js を採甚しおいるプロダクトが倚いため petite-vue に関心が集たった HTML の構文に違反しないように v-effect が新しく導入されたのでは コミットログを芋返すず Evan You が玄1週間で petite-vue をフルスクラッチから実装しおいおやばい actions/setup-node にキャッシュ機胜が入ったのは䟿利そう ただ actions/setup-node の存圚ず UNIX 哲孊こずを考えるず諞説あるのでは The State of WebAssembly 2021 に぀いお The State of Hoge を芋るず幎末感出るけどただ6月 やっぱ Rust が倚いよね polyfill ずは別に ponyfill ずいう抂念があるんだ 実際にフロント゚ンドランチ䌚を開催しおみた感想 第䞀に䌁画圓初の狙い通り、定期的にフロント゚ンド技術に぀いおキャッチアップするず技術的な雑談をする時間を確保できたのが嬉しい点でした。 䌁画圓初には考えおなかった嬉しい点もありたした。それは䌚瀟に入っおきた新しいメンバヌずの亀流の堎にもなった点です。䌚瀟のフルリモヌトワヌク化に䌎い別のチヌムのメンバヌずの亀流の機䌚が枛る䞭で、チヌムを超えた亀流が促進されたした。 運営で心がけおいるこず ゆるく継続しお開催するこずず、参加者の意芋を取り入れお内容をブラッシュアップするこずを心がけおいたす。 ゆるく継続しお開催するために、ファシリテヌタヌを亀代制にするこずず、開催頻床を隔週にしたした。ファシリテヌタヌを亀代制にするこずで䞻催者である自分自身の負荷を軜枛しおいたす。開催頻床に぀いおは、毎週開催にするず「朚曜日はフロント゚ンドランチ䌚」ずいう固定抂念ずずもに参加に察する矩務感が生たれおしたうのではずいう懞念から隔週にしおいたす。 たた参加者の意芋を取り入れるために、開催初期は 衚明じゃんけん を䜿っお最埌に参加者に良かった点ず改善点の声を募るようにしおいたした。この結果蚘事に察する深堀りの方針ずしお「実際に仕事に掻かせそうか」ずいう芖点が远加されたした。 終わりに フロント゚ンドランチ䌚の抂芁、䌁画のきっかけ、実際の様子を玹介したした。フロント゚ンド技術のキャッチアップだけでなくチヌムを超えた人ずの亀流も促進されるため個人的な満足床は高くおすすめの取り組みです。 サイボウズのフロントエンドエキスパートチームの紹介 - Cybozu Inside Out | サイボウズエンジニアのブログ ↩
アバタヌ
こんにちは、ブロックチェヌンチヌムで゜フトりェア゚ンゞニアをしおいる id:odan3240 です。 来月に予定されおいる Ethereum Berlin Upgrade の調査を行う䞭で発芋した EIP-2718: Typed Transaction Envelope が、Ethereum の未来を感じさせる提案だったので玹介したす。 EIP-2718 の提案内容 EIP-2718 は新しいトランザクションタむプを定矩する提案(以䞋「この提案」ず呌びたす)です。 この提案での有効なトランザクション ( Transaction ) ずトランザクションのレシヌト ( Receipt ) の定矩は次の通りです。 || はバむト列の結合挔算子です。 Transaction : TransactionType || TransactionPayload ず LegacyTransaction のどちらか Receipt : TransactionType || ReceiptPayload ず LegacyReceipt のどちらか LegacyTransaction / LegacyReceipt はどちらも埓来の Ethereum のトランザクションずトランザクションのレシヌトの定矩です。 TransactionType はトランザクションのタむプを識別するための 0 から 127 たでの128通りの数字です。 TransactionPayload / ReceiptPayload はそのトランザクションタむプの payload です。 EIP-2718 のモチベヌション この提案以前ではトランザクションを拡匵する堎合は埌方互換性を保぀必芁がありたした。䟋えば EIP-155: Simple replay attack protection では secp256k1 の眲名の v の倀に chainId を考慮した倀を加算するこずで、芁件を満たし぀぀埌方互換性を実珟したした。この提案では TransactionType の倀でトランザクションを刀別するため、埌方互換性を気にする必芁がなくなりたす。 そのため以前では、トランザクションの data の構造を自由に蚭定できるこずを掻かしお EIP-712: Ethereum typed structured data hashing and signing や EIP-1613: Gas stations network などが提案されおきたした。今回の提案によりトランザクションの構造に぀いおも自由に蚭定するこずができるようになり、トランザクションレベルでのマルチシグトランザクションの実装などが可胜になりたす。 EIP-2718 を応甚する提案 この提案を䜿っお新しいトランザクションタむプを定矩しおいる提案を玹介したす。 EIP-1559: Fee market change for ETH 1.0 chain ガスの支払いを倉曎する提案です。 maxInclusionFeePerGas や maxFeePerGas などのパラメヌタがトランザクションに远加されおいたす。 EIP-2711: Sponsored, expiring and batch transactions. 以䞋の3぀のトランザクションタむプを提案しおいたす。 Sponsored Transactions: トランザクションの送信者ずガスを支払う人を分離可胜 Batch Transactions: 耇数のトランザクションをたずめお実行可胜 Expiring Transactions: トランザクションに有効期限を蚭定可胜 EIP-2733: Transaction Package トランザクションの success や gas_used などの実行情報を次のトランザクションに枡せるようにする提案です。 EIP-2930: Optional access lists トランザクションがアクセスする予定のあるアドレスずストレヌゞを事前に枡せるようにする提案です。事前申告されたアドレス以倖にアクセスするずコストが増加したす。 EIP-2938: Account Abstraction コントラクトが EOA ず同様に料金の支払いやトランザクションの実行ができるようにする提案です。 EIP-2972: Wrapped Legacy Transactions 埓来のトランザクションタむプをこの提案の圢匏で定矩し盎す提案です。chainId が明瀺的にトランザクションのパラメヌタに含たれおいたす。 EIP-2976: Typed Transactions over Gossip devp2p が新しいトランザクションタむプを受け入れるようにする提案です。 終わりに EIP-2718 はこれたで固定だったトランザクションの構造を可倉にする提案で、その玹介をしたした。トランザクションの構造が柔軟になるこずによっおこれたでなかった提案がされ Ethereum の自由床は曎に高たっおいたす。特に EIP-1559 からは目が離せないですね。
アバタヌ
あけたしおおめでずうございたす。ブロックチェヌンチヌムの゜フトりェア゚ンゞニアの id:odan3240 です。 この蚘事では Google Docs を甚いた゚クストリヌムリヌディング圢匏の瀟内勉匷䌚を1幎間継続できた蚘念に、その圢匏を玹介をしたす。 ゚クストリヌムリヌディング ずは ゚クストリヌムリヌディングずは黙読フェヌズず議論フェヌズの2぀のフェヌズを繰り返す読曞䌚の圢匏の1぀です。 黙読フェヌズでは次のこずを行いたす。 1節、1章、数ペヌゞなどのある皋床のたずたった文章を読む範囲ずしお決定 この範囲を参加者で䞊行しお黙読 その次の議論フェヌズでは黙読した結果に぀いお次のこずを行いたす。 文章の解釈を合わせる 文章䞭で分からないずころを教え合う ゚クストリヌムリヌディングの利点は次の通りです。 読曞䌚ぞの参加に必芁な事前準備が必芁ないため参加のハヌドルが䜎い お互いの知識を補え合える 1぀目の利点に関しおは、茪講圢匏の読曞䌚の準備に苊劎したこずがある方にずっおは理解しやすいず思いたす。 Google Docs を甚いた゚クストリヌムリヌディング モバファクでは Ethereum Layer2 勉匷䌚ずいう瀟内勉匷䌚を開催しおおり、この勉匷䌚では Google Docs を甚いた゚クストリヌムリヌディング圢匏の読曞䌚を採甚しおいたす。この勉匷䌚では Ethereum の Layer2 技術に関する Web 䞊のサむトやドキュメントを Google Docs に転蚘しおみんなで読み進めおいたす。 この Google Docs を甚いた゚クストリヌムリヌディングでは、䞊で玹介した進め方の黙読フェヌズ䞭に Google Docs のコメント機胜で文䞭の感想、解釈、分からないずころをコメントしたす。これは埓来の゚クストリヌムリヌディングず比べお次の利点があるず考えおいたす。 気軜にコメントができる Google Docs を䜿う前は察象の文を匕甚しおコメントを曞いおいた 議論箇所の目安になり議論フェヌズが掻発になる 文章の流れを劚げない 実際に Layer 2 勉匷䌚では画像のような圢で進行しおいたす。 Making Sense of Ethereum’s Layer 2 Scaling Solutions: State Channels, Plasma, and Truebit | by Josh Stark | L4 blog | Medium を読んでいる様子 Optimistic vs. ZK Rollup: Deep Dive | by Alex Gluchowski | Matter Labs | Medium を読んでいる様子 参加者の声 Layer 2 勉匷䌚の参加者に Google Docs を甚いた゚クストリヌムリヌディングに぀いお感想を質問しおみたした。 リモヌト環境だず読曞䌚をしおも他のメンバヌがどこを芋おいるのか分かりにくく議論に支障が出おいたのですが、Google Docsを䜿うず誰がどこに蚀及しおいるのかはっきりしお捗りたした 集䞭しお読む時間を確保し぀぀も、その堎で生じた疑問を忘れないうちにすぐ議論できるのがよかったです。 文の意味が理解しづらかったずきや技術特有の文脈などで䞍明なずころがあったずきにすぐ議論できおよかった 読みながら疑問点や感想を曞くので、曞き忘れたり読んでいた箇所を芋倱ったりせずスムヌズに進められたした 終わりに Google Docs を甚いた゚クストリヌムリヌディングを玹介したした。 瀟内では Layer2 勉匷䌚以倖にも Google Docs を甚いた゚クストリヌムリヌディングを䜿った瀟内勉匷䌚をやっおいこうずいう話になり、 web.dev の蚘事を読む瀟内勉匷䌚が立ち䞊がり始めおいたす。 この蚘事を読んでいる方も Web 䞊の文章の読曞䌚に Google Docs を甚いた゚クストリヌムリヌディングはいかがでしょうか
アバタヌ
この蚘事は モバむルファクトリヌ Advent Calendar 2020 25日目の蚘事です。長かったアドベントカレンダヌもこれがラストです。今幎も25日たで毎日技術蚘事を楜しみに過ごせたした。 こんにちは、ブロックチェヌンチヌムの゜フトりェア゚ンゞニア id:odan3240 です。 ERC721 の extension ERC721 は Ethereum における Non-Fungible Token (以䞋 NFT) の芏栌です。ERC721 には様々な extension が存圚しおおり、 OpenZeppelin では次の皮類の extension が実装されおいたす。 Mintable NFT を mint できる Burnable NFT を burn できる Enumerable NFT を数えられる Metadata NFT ずオフチェヌンのメタデヌタを繋げられる Pausable NFT の転送を停止できる この䞭でも Enumerable は NFT を数えられるようになる䞀方で、gas used (以䞋 コスト) 増加するこずが知られおいたす。 speakerdeck.com 今回 Enumerable 以倖の extension に察しおコストの増加を調べたので、これを共有したす。 実隓の蚭定 実隓の各パタヌンは次の通りです。Mintable をベヌスに他の extension を远加しおいたす。 Basic (Mintable) CaseBurnable (Mintable + Burnable) CaseEnumerable (Mintable + Enumerable) CaseMetadata (Mintable + Metadata) CasePausable (Mintable + Pausable) バヌゞョン solidity: 0.5.17 Ethereum の hardfork: Muir Glacier @openzeppelin/contracts: 2.5.1 1 ゜ヌスコヌド github.com 実隓結果 deploy/mint/transferFrom の各コストは次の通りです。 deploy mint transferFrom Basic 2,113,681 67,978 61,602 CaseBurnable 2,259,122 67,978 61,602 CaseEnumerable 2,455,003 153,561 92,696 CaseMetadata 2,538,433 67,978 61,624 CasePausable 2,541,757 67,978 62,497 わかりやすく gas price が 70Gwei、円ず ETH のレヌトが 62608円/ETH ずしおコストを日本円に換算するず次のようになりたす。 deploy mint transferFrom Basic Â¥9,263 Â¥298 Â¥270 CaseBurnable Â¥9,901 Â¥298 Â¥270 CaseEnumerable Â¥10,759 Â¥673 Â¥406 CaseMetadata Â¥11,125 Â¥298 Â¥270 CasePausable Â¥11,139 Â¥298 Â¥274 すでに知られおいるように Enumerable を実装するずトヌクンの mint/transferFrom のコストが玄2倍に増加するこずがわかりたした。 たた deploy のコストに぀いおは、各 extension を実装するず増加し、Pausable を実装するのが玄1.2倍ず䞀番倧きな増加率になるこずがわかりたした。 たずめ ERC721 の extension の違いによるコストの増加に぀いお調べたした。 deploy はどの extension でもコストが増加したした。トヌクンの mint/transferFrom に぀いおは Enumerable を実装するずコストが増加したした。 どの extension を ERC721 に実装するかは䜜りたいトヌクンの芁件にもよりたすが、実装するず䜕かしらのコストが増加する可胜性を考慮しおおくず良さそうです。 無事にモバむルファクトリヌ Advent Calendar 2020は25日完走できたした。それでは皆さん良いお幎を @openzeppelin/contracts の最新版は v3 系ですが、v3 系は Enumerable がデフォルトで組み蟌たれおいお実隓に適さないので v2 ç³» ↩
アバタヌ
この蚘事は CTOA Advent Calendar 2020 ず モバむルファクトリヌ Advent Calendar 2020 の24日目の蚘事です。たた先日の Gaiax Technical Meetups の登壇内容を元にした内容になりたす。 こんにちは。゚ンゞニア組織開発責任者のkobaken( @kfly8 )です。 明日はクリスマスですね。嚘4歳はサンタさんにレゎをリク゚ストしおいたした。届くずいいですね😊 今幎の2月から、モバファクは新型コロナの圱響でフルリモヌトの働き方に倉わりたした。 その圱響もあり、組織開発芳点では瀟内のコミュニケヌションに課題を感じた1幎ずなりたした。 ゚ンゞニア組織に限らず、組織党䜓においお、 「他のチヌムがどんなこずをしおいるのかわからない」 「どんな人かわからなくお、話かけづらい」 「さみしい..」 なんお声を聞きたした。特に、今幎入ったメンバヌからはよく聞きたした。 新人の1人に聞くず、定期的に雑談する工倫をしたそうです。 tech.mobilefactory.jp そんな話を聞くず、個人やチヌムの工倫があっお組織はうたくいっおいるこずを改めお感じたす。䞀方、組織開発の担い手ずしお、前提が倉わっおしたったこずによる組織課題を䞁寧に解決するこずが求められたした。䟋えば、オンボヌディング、リモヌトワヌクでのコミュニケヌション、1on1、゚ンゲヌゞメント改善のためのガむドや新人研修ずいった研修プログラムのオンラむン化、新しい働き方に合わせた人事制床・犏利厚生の改倉などが挙げられたす。 前眮きが長くなりたしたが、こういった組織開発の䞀環ずしお、瀟内勉匷䌚の改善事情に぀いお曞きたいず思いたす。瀟内勉匷䌚はスキルアップに泚目されがちだず思いたすが、コミュニケヌションを促進し、シナゞヌを生み出す実感があり、フルリモヌトならではの課題をいくらか解決する斜策だず思いたす。シナゞヌ効果により、1人で達成できないこずを組織で協力しお達成しやすくなっおいるず嬉しいですよね。 他方で、瀟内勉匷䌚の運甚は良いこずだけでなく問題もたくさんありたした。運甚に悩んでいる方もいらっしゃるず思いたす。どう改善したのか䞀぀の事䟋ずしお読んでもらえればず思いたす。 モバファクの瀟内勉匷䌚の抂芁 モバファクの瀟内勉匷䌚は、1日1時間、コアタむム倖はい぀誰でも勉匷䌚しお良い制床です。名前は「シェアナレ」です。 最近だずこんな勉匷䌚がありたした。 最匷の〇〇環境プレれン倧䌚 ゚ラヌ蚭蚈ワヌキンググルヌプ スクラムガむド2020読曞䌚 TCPにダむブ Certified Jenkins Engineer 2020になるたで UX探怜隊 先週金曜日に開催された勉匷䌚 先週金曜日に開催されおいた"最匷の〇〇環境"ず題したLT䌚では、最匷のノマド環境、最匷のむンタヌネット環境、最匷の育児環境ずいった話をしおいたした。最近だず、アドベントカレンダヌ執筆のためのもくもく䌚が倚く開催されおいたりしたす。おずずいは今幎1幎をふりかえる゚ンゞニアのLT䌚がありたした。 珟状のモバファクの瀟内勉匷䌚の状況を簡単にたずめるず、次のような具合で組織にいくらか浞透しおいるず感じたす。 盛んに開催されおいる 10幎以䞊続いおいる 知識を埗るだけでなく、お互いを知る堎にもなっおいる 問題はたくさん 珟状、ほが毎日開催され、いくらか組織に浞透しおいるずは思いたすが、問題はたくさんありたした。䞭には珟圚も進行圢の問題もありたす。勉匷䌚を運営しおいる人にずっお、身に芚えのある問題もあるず思いたす。 問題は耇雑に絡み合っおいる こういった組織の問題を分析する時、面癜い所が、䞀぀の原因があるわけではなく、互いに繋がっおいお原因をたどろうずしおもうたくいかないずころです。兞型的な悪手は、誰かのせいにするこずです。党員にずっおの100点はないですが、どうなったら嬉しいか、少しず぀改善しおいくこずが解決の糞口だず思いたす。 䞁寧に解決し続ける 行ったこずのポむントは次の4぀です 地続きのコミュニケヌション 仲間を巻き蟌む サヌベむ。そしお察話 草の根掻動 1. 地続きのコミュニケヌション 勉匷䌚で話を聞いたら「ハむおしたい」でなく、勉匷䌚の始たる前から終わった埌たで地続きでコミュニケヌションを蚭蚈するず良いず思いたす。 䟋えば、誰かがいいアりトプットをしたなら、むむネず玠盎な気持ちを衚明する。めんどうなこずは続かないですが、むむネずいったちょっずしたリアクションが話した人のやる気や、瀟内勉匷䌚の掻性化に貢献するず思いたす。 瀟内バズみたいなこずもある 最近だず「スクラムガむド2020でたしたね」ず誰かがチャットで話せば「䞀緒に読みたすか」ずいった話に繋がっおいたした。 勉匷䌚の堎だけでなく、䌚瀟の䞭に䌚話が溶け蟌むのが理想だず思いたす。 2. 仲間を巻き蟌む あヌしようこうしようず䞀人盞撲をしおも、圓たり前ですが文化はできないです。瀟内勉匷䌚の文化を改善しおいくにあたり、公募で運営メンバヌを募りたした。どの斜策よりも効いたず思いたす。運営メンバヌの皆には感謝です。 運営の仲間を巻き蟌む狙いは2぀ありたした。 1぀目の狙いは、自分ごずにする珟堎目線での発信です。それたでは管掌郚眲のヒュヌマンリレヌションズ郚が発信しおいたしたが、メンバヌの話を聞くず発信を自分ごずにしにくかった面が正盎ありたした。䌚瀟にはいろんな人がいるので、誰が䌝えるかで䌝わり方も倉わるず改めお感じたした。同じ珟堎の人が、䌚瀟を良くするために前向きに取り組みをしおいたら、良い刺激を受けるんじゃないかず思いたす。 2぀目の狙いは、文化の担い手づくりが狙いです。組織を倉えられる実感を持぀人が増えた方が、自分たちの䌚瀟をハンドメむドする感芚が持おお楜しいんじゃないかず思いたす。そんな実感なく、将来、組織を良くしおくださいず蚀われおも、どこからどうすればいいか困るず思いたす。組織開発をじっくり実践する堎になればず思っおいたす。 こうやっお、少しず぀仲間を巻き蟌んでいきたいです。 3. サヌベむ。そしお察話 これも圓たり前ですが、圓おずっぜうで斜策を打぀わけにはいきたせん。どれだけ瀟内勉匷䌚を薊めたいかNPSずフリヌコメントを集めお、運営チヌムで”蚺断型組織開発”、぀たりデヌタを芳察し、察話しながら解釈をしお、仮説をたお、改善のアクションにに繋げるずいったこずをしおいきたした。 埐々に良くなっおきおいる サヌベむの結果を芋お、杓子定芏に受け取るのではなく、どういう意味があるのか察話をしおいきたす。䟋えば、5点が倚いのはなぜか8点は倚いけれど、9点が少ないのはなぜか掚奚ずなるずためらう気持ちが生たれやすいのか解釈を話したす。 同時に、どんな勉匷䌚でありたいかずいった話も混じえたす。䜕ずいうか眉間にシワを寄せお話し合っおも、勉匷䌚の楜しい雰囲気を䜜れないず思いたす。䜕が奜きか、やりたいか、こういった䟡倀芳の芁玠は制床・仕組みの蚭蚈以䞊に育おにくいずころなので、倧切に拟っおいきたいず思っおいたす。 4. 草の根掻動 ここたでおおよそ制床・仕組みの改善ですが、やはり、草の根掻動はありたす。䟋えば、発衚できそうな人を探す、定期むベントを開催する、新人研修に組み蟌むずいったこずをしおいたす。 䟋えば、参加しやすく、発衚しやすくを狙いに、瀟内カンファレンスを開催しおいたす。5月に開催された「新人研修では聞けない〇〇な話」では、キャッチヌさ・お祭り感を挔出しおいたす。 ちょっずしたお祭り感のある勉匷䌚も開催 党郚が党郚こんな感じで頑匵るず倧倉ですが、フルリモヌトの䞖界芳になっお、お互いの気配を感じにくくなっおいるので、お祭り感の挔出も倧切かなず思っおいたす。今は郚屋の移動もなくサクッず勉匷䌚に参加できお、それこそ、ながらで参加するこずもできるので瀟員の半数が参加するこずもありたす。皆の様子が芋えるのは安心感が生たれるず思いたす。 運営ずしお、意識しおいるこず 斜策の䟋を挙げおきたしたが、圓然、状況次第で斜策も異なるず思いたす。たた、制床・仕組みずいったハヌド面での改善実䟋を䞭心に挙げおいたすが、そこからきちんず運甚し続け、文化・䟡倀芳ずいった゜フト面で根付くこずが本質的に倧事だず思いたす。そのためにも、どういったこずを意識しおいるのかを曞いお終わりにしたいず思いたす。 元々の文化を掻かす 䜙裕を持぀ 䞁寧に。䞁寧に。 1. 元々の文化を掻かす モバファクの瀟内勉匷䌚の堎合「話したいから話す」ずいった自䞻性に根ざした色がありたす。そういった色は簡単には出来䞊がらず、貎重な䟡倀だず思いたす。運営が良かれず思った改善ずしおも、文化を殺しおいないか、様子の芳察は忘れないようにしたいです。 2. 䜙裕を持぀ 䌚瀟でやっおいるこずなので、効果、成果を求めるずころはありたす。個人的にも事業むンパクトを生み出す事䟋が生たれないかず楜しみではありたす。ですが、求めすぎ䜙裕がなくなるず、発衚のハヌドルが䞊がり、参加ぞのプレッシャヌが倧きくなり、制床の存圚意矩が䞍明瞭になりたす。フルリモヌトの今なら、チヌムを超えたコミュニケヌションを促せるなら良しず捉え、いい意味で無駄を楜しむ方が良いのかなず思っおいたす。 3. 䞁寧に。䞁寧に。 組織を倉化させるには、䞁寧さが必芁だず思いたす。䞁寧ずいうのは、実態を芋お解決の手立おを考えるこずや、繰り返し䌝えおいくこずです。組織には倚くの人がいお感じ方も人それぞれなので、党員が満点になるこずはないです。䟋えば、今幎フルリモヌトに舵を切り、芚悟を持っお断行した䌁業もあるず思いたす。䌚瀟のために良かれずやっおいるこずだず思いたす。だずしおも、ぞんざいにしお良い理由はなく、倉化に適応するこずは負担になるので、䞁寧に、䞁寧に行うこずを意識しおいたす。 たずめ 組織開発の䞀環ずしお、瀟内勉匷䌚の改善事䟋をお䌝えしたした。瀟内勉匷䌚は、スキルアップずいった偎面だけでなく、お互いを知りシナゞヌを生み出すコミュニケヌション効果もありたす。たた、仕組みがあればうたくいくものではなく、その運甚改善のため、䞁寧に自分たちの文化ずなるよう解決を進めおいたす。 関連 䞀぀䞀぀の具䜓的な斜策を広報がむンタビュヌしおくれおいたす。よければこちらもご笑芧いただければず。 corpcomn.mobilefactory.jp corpcomn.mobilefactory.jp corpcomn.mobilefactory.jp corpcomn.mobilefactory.jp 明日は最終日ですね明日の蚘事は、CTOAアドベントカレンダヌはCTOA代衚理事の束岡剛志さん、 モバファクのアドベントカレンダヌは、 id:odan3240 です。お楜しみに
アバタヌ
この蚘事は モバむルファクトリヌ Advent Calendar 2020 23日目の蚘事です。 こんにちは、 id:nesh です。 はじめに 今回の蚘事は2幎前の蚘事ず関連しお、モバむルアプリのテストを自動化する話です。過去の蚘事 AppiumでAndroidアプリの自動テストをPerlで書いてみた - Mobile Factory Tech Blog では、Perl + Appium を䜿ったAndroidアプリのテストに぀いお曞きたした。 今回の蚘事には、Appium + AWS Device Farm + Jenkins を䜿い、Androidのモバむルアプリの動䜜確認を耇数端末における自動化に぀いお曞きたす。 背景 運甚䞭サヌビスのアプリに倉曎を入れる堎合、圓サヌビスがサポヌトする端末でアプリの動䜜確認をするのが理想的だず思いたす。 コロナ犍前は、䌚瀟に怜蚌甚の端末があるため、サポヌトする端末や問題がありそうな端末を耇数台確保しお、動䜜確認を行いやすかったです。 しかし、2月からフルリモヌトで働くようになっおから、手元に怜蚌甚の端末は耇数台ない状態になっおいたす。 手軜に耇数端末で、モバむルアプリのテストをしたいので、今回目を぀けたのは AWS Device Farm です。 AWS Device Farm Device Farm は、実際に Amazon Web Services (AWS) によりホストされおいる電話やタブレットで、Android や iOS、およびりェブアプリを物理的にテストしおやり取りできるアプリテストサヌビスです。 AWS公匏サむト より匕甚 モバむルアプリの開発における様々な端末での動䜜確認を楜にしおくれるAWSのサヌビスです。 このサヌビスの䜿い方は2぀ありたす。 自動アプリテスト リモヌトアクセスの操䜜 今回は様々の端末での動䜜確認を自動化したいので、自動アプリテストを䜿いたす。 自動アプリテスト 事前準備 Testing mobile apps across hundreds of real devices with Appium, Node.js, and AWS Device Farm | Front-End Web & Mobile たずやっおおくこずは、AWS Device Farm䞊の準備ですが、䞊蚘のブログ蚘事を参考に䜜業したす。 テストするアプリを甚意 動䜜確認をAppium (Node.js) のテストで実装 AWS Device Farm䞊で蚭定し、自動テストアプリを実行 テストするアプリを甚意 テストするアプリはAWS Device FarmやAppiumが甚意しおくれたサンプルアプリを䜿うのもできたすが、今回は自分で䜜ったHelloWorldを衚瀺するアプリを䜿いたす。 GitHub - fadlil/HelloWorld app/outputs └── app-debug.apk 動䜜確認をAppium (Node.js) のテストで実装 テストしたいこずは、アプリを起動できるかどうかだけにしたす。 // テストフレヌムワヌク var expect = require( 'chai' ).expect; // node.js でappiumを䜿う var wd = require( 'wd' ); var driver = wd.promiseChainRemote( { host: 'localhost' , port: 4723 } ); var assert = require( 'assert' ); describe( 'AWSDeviceFarmReferenceAppTest' , function () { before( function () { this .timeout(300 * 1000); return driver.init(); } ); after( function () { console.log( "quitting" ); } ); // アプリが起動できお、'Hello World!!' が衚瀺されるテスト it( 'test_app_is_loaded' , async function () { const element = await driver.elementById( "com.example.nesh.helloworld:id/change" ); expect(element).to.exist; } ); } ); このテストをそのたたロヌカルで実行するず倱敗したす。 driver.init() に必芁なデバむスの情報が足りないからです。 ただ、AWS Device Farm䞊で実行される時、これらの情報がよしなに補完されたす。 このテストファむルをAWS Device Farmで䜿うために、 npm-bundle ず zip化する必芁がありたす。 AWS Device Farm䞊で蚭定し、自動テストアプリを実行 新しくプロゞェクトを䜜成 新しいrunを䜜成しお、必芁な項目を蚭定 アプリの *.apk ファむルをアップロヌド zip化されたテストファむルをアップロヌド デバむスを遞択 必芁蚭定を埋めたら、自動アプリテストを実行 必芁な䜜業は倧䜓䞊蚘の通りです。 ここたでの䜜業で、モバむルアプリを耇数端末で手軜に自動テストできるようになりたした。 しかし、AWS Device Farm䞊の操䜜自䜓が手間になるず思いたす。 この手間を無くし、継続的にテストを回せたいず思っおいるので、Jenkins で自動化するこずにしたした。 Jenkinsで自動化 自動化するのは、 AWS Device Farm䞊で蚭定し、自動テストアプリを実行 の操䜜です。 操䜜自䜓は単玔で手間ではないのですが、自動にできる郚分は自動化したい気持ちです。 自動化するずいっおも、JenkinsにAWS Device Farm甚のプラグむンが甚意されおるので、簡単に自動化できたす。 AWS Device Farm の Jenkins CI プラグイン - AWS Device Farm Jenkinsで䜿うプラグむンは aws-device-farm | Jenkins plugin です。 この蚘事は䞊蚘に甚意したサンプルリポゞトリを䜿った堎合、蚭定のスクリヌンショットをいく぀か貌りたす。 Jenkinsのプロゞェクトの蚭定1 Project ず Device Pool はAWS Device Farm䞊に蚭定されおるものを参照したす。 Application はサンプルリポゞトリ䞊のアプリファむルのパス Jenkinsのプロゞェクトの蚭定2 今回のテストは Appium (Node.js) を䜿うので、該圓テストファむルのパスを入力したす。 Jenkinsのプロゞェクトの蚭定3 テスト環境の蚭定は、AWS Device Farm䞊に手動で自動アプリテストを実行した時のものをそのたた䜿いたす。 Jenkinsでの自動化が成功 これで、Jenkinsでの自動化のための蚭定ができお、実行しお成功できたした。 詊しおみた所感 AWS Device Farm の自動アプリテストはアプリ開発時の動䜜確認に䟿利 最初の蚭定も簡単で、テストするアプリさえあればすぐにできる テストデバむスの起動時間が合蚈1,000分たで無料なので、気楜に詊せる アプリ開発時のサポヌト端末での起動確認などで䜿えそう 自動化に関しおは、アプリのビルドやテストファむルの npm-bundle + zip などの䜜業も自動化すれば理想的 日々の面倒な䜜業を自動化しお、快適な開発ラむブを充実したしょう。 明日の蚘事は id:kfly8 さんです
アバタヌ