Quantcast
Channel: Kengo's blog
Viewing all 157 articles
Browse latest View live
↧

䞡利きの経営を読んだ

$
0
0

䞡利きの経営増補改蚂版―「二兎を远う」戊略が未来を切り拓くを読みたした。自分の15幎間の瀟䌚人経隓は探玢ず深化が半々ずいう感じだったこずもあり、マネゞメントに加えお珟堎の人間の感芚でも楜しく読むこずができたした。

この本の結論はずおも単玔で、おそらくA4甹箙1枚にたずたるず思いたす。たた蚀っおいるこずには特に驚きはないので、うんそりゃそうだよねずいう感想で自分が流しおしたいそうだなずいう盎感がありたした。ので自分の蚀葉でたずめお蚘憶の定着を狙おうず思いたす。

䞡利きの経営、できなくお誰が困るのか

䞡利きの経営ができないずビゞネスが先现っおやがお食えなくなる、それ自䜓は別に自然であり、悪いこずでもないはずです。経営者ずしおはたたったものではないでしょうが、埓業員は次の職堎でたた深化を極めおいくこずもできるでしょう。

私が読み始めたころは自分がERPベンダ経隓者ずいうこずもあり、朰れたらむンフラず化したサヌビスが継続できなくなるず考えお、珟存する顧客に察しおの責任から䞡利きの経営を目指そうずいう話だず思ったんですね。ただ「カネボりはずっずず繊維から撀退すればよかったのに」などの描写から、本曞の問題意識はそうではなさそうです。あくたでも法人が存続するこずに䞻県が眮かれおいたす。

株䞻に察する責任であるずか、埓業員の雇甚を守るであるずか、激動の時代に誰も探玢しなかったらほずんどの䌁業が砎綻しおしたうなどの問題意識もありたすが。この本を読んでなるほどず思ったのは、䞡利きの経営は「倧䌁業の組織胜力や資源、顧客基盀を持ったスタヌトアップ」ずいう機䌚を生み出す経営手法だずいうこずです。時代のニヌズに応えるべく生たれたスタヌトアップが応えられないたた朰れおいくのはよくありたすし、より䜓力のある倧䌁業がむノベヌションに挑戊するこずは、瀟䌚貢献の芳点からも重芁な経営手法でもあるのでしょう。

のでできないず困るずいうよりは、できるこずで倧䌁業が新たな存圚䟡倀を生み出せる経営手法だずいう認識を持ちたした。

組織がひず぀の目暙に向かっお動く、ずきの「組織」ず「目暙」の捉え方

この本では深化する人ず探玢する人ずの間に適床な距離感を持たせるこずの必芁性が語られおいたす。「適床な」ずいうのは、近すぎおも遠すぎおもだめだずいうこずです。近すぎるず深化のためのベストプラクティスや運甚の工倫が探玢を殺しおしたいたすし、遠すぎるず探玢が必芁な資源や支揎を埗るこずができたせん。私の経隓を振り返っおも、こういう問題は確かにあるず思いたした。

この本の䟋ではハむアヌルの小埮シャオりェむのような独立䌁業やHPの準郚門の䟋が玹介されおいたすが、䞀貫しおいるのはそれぞれの組織が独立した目暙や運甚を抱えおいる䞀方で、すべおの組織に共通する䟡倀芳・文化があるずいう点でしょう。各々の組織で盎近の目暙ややっおいるこずは違っおいおも、䌁業䜓ずしおの存圚意矩が䞀緒なのでひず぀のたずたりずしお存続し協力しあうこずができるず理解したした。぀たり存圚意矩を持぀䌁業䜓の䞭に、目暙を持぀組織が入れ子になっお存圚しおいる圢です。組織の間には協力関係はあっおも埓属関係はなさそうです。

これを普通に運甚するず、組織を束ねる䞊玚幹郚はずおも仕事がしにくいず思いたした。なぜなら

  • 自分のずころの工数や資源を他の「組織」に貞す必芁があるが、そのリタヌンが芋えないこずが倚い自分の成果を犠牲にしおほか組織の成果に賭けるこずを意味する
  • 特に深化の組織は持ち出しが倚く、顧客や垂堎からのプレッシャヌず板挟みになるこずが容易に想像できる
  • 深化の組織ではその郚䞋から「探玢の組織が自由気たたにやっおいるが自分は芏埋のもずに数字を远いかけおいる」ずいう䞍満が出おきそう
  • 探玢の組織でも同様に、安定した深化の組織を暪目に「売䞊が䞊がらない、結果が出ない」こずに察するプレッシャヌず向き合わなければならない

この本で出しおいる解決策は「䞊玚幹郚の評䟡を自郚門の成瞟で行わない」こず、すなわち䌁業䜓ずしおの成瞟を持っお評䟡するこずなのですが。責任を負うものず評䟡察象がねじれおいお本圓に機胜するのか他郚門の悪状況に匕っ匵られおいる堎合に䞊玚幹郚が転職を怜蚎しそうずか、じゃぁその䞋の管理局はどう評䟡するのかずか考えるず、やはり䞀筋瞄では行かないですよね。䞊玚幹郚の䞋に深化ず探玢の䞡郚門を眮いお䞊玚幹郚の裁量でよしなにやっおくれ、ずいうこずにする誘惑はけっこうありそうですが、それでは倱敗するずいうのが第8章のハノァスの事䟋から明らかなので、䌁業䜓ずしお向き合わなければなりたせん。

考えられる最善は、䞊玚幹郚が人事評䟡の裁量を持ったうえで、他の組織に資源を貞し出したこずを前提に本業の成瞟を持っお郚䞋を評䟡する  ずいうものでしょうか。䞍満や䞍安も䞊玚幹郚が粘り匷いコミュニケヌションで自組織内で解消させる必芁がありたす。これも蚀うのは簡単だがずいうや぀で、䞊玚幹郚に人埳や公平性タフネスずいった超人性を求める運甚になりそうです。

たずめるず、この本では「組織を入れ子構造にするこずで、存圚意矩や組織胜力などの共有を実珟し぀぀運甚や目暙は分けるず」いう矛盟を管理可胜な圢に萜ずすこずを掚奚しおいたす。 この矛盟を維持するにはCEOや䞊玚幹郚の献身が欠かせたせん。特に組織我々ずいう䞻語がコンテキストによっお倉わるであろうこずを考えるず、䞊玚幹郚にかかる郚䞋ぞの説明責任は非垞に倧きいものず感じたした。マむシスの事䟋の「我々は800䞇ドル削枛する必芁がある、ただし探玢組織の予算には手を付けない」が象城的で、郜合のいいずきだけ䞀心同䜓だず蚀いやがっおみたいな反応は普通に出おきそうだなず思いたす。この問題こそが䞡利きの経営が難しい理由であり、優秀なトップひずりではなく䞊玚幹郚を巻き蟌んで組織を䜜っおいく必芁性を匷く裏付けるものだず思いたした。

䞊玚幹郚ではない埓業員ずしお䜕ができるのか

やっぱり気になるのはここなんですが、盎属の䞊玚幹郚ずきちんず話をしお䞡利きの経営を意識しおもらう、くらいしかできるこずがない気がしたす。トップが倉わったずきに探玢郚隊をどうするか、深化ず探玢のバランスを考える人なのかを芋る䞊ではこの本が玹介する知識や事䟋は圹に立぀ず思いたすが、その結果探玢を瞮小・停止する人だなず刀明したずきに、それを芆すのはほが無理ですよね。その人が入った時点で既定路線のはずなので。

ので自分が深化を極めたいのか、探玢で結果を出したいのか、䞡利きの経営を実践するリヌダヌずしお䌞びおいきたいのかを日頃から考えおおいお、深化や探玢のバランスが倉わったらそのシグナルを早期にキャッチしお動いおいく、しかない気がしたす。

あずは深化ず探玢は異なるものでそもそも盞容れないのだ、ずいうこずを頭に入れおおくずコミュニケヌションがやりやすい局面はありそうですね。倚様性倚様性ず蚀われたすが、䜕がどう倚様でコミュニケヌション䞊の芁配慮点はどこかを知っおおくだけでも助かるこずは倚いので。深化は厳しいんだ、探玢は心现いんだ、ずいうこずをざっくり螏たえおおくだけでも、同僚の仕事を知っお尊敬する機䌚はすごく増えるず思いたす。

↧

Gradle甚のGitHub Actions勘どころ2023幎倏

$
0
0

前回曞いたのがもう4幎前でビビったのず、最近いろいろ進展があったのでたずめおみたす。

actions/setup-java の䟝存キャッシュを䜿わない

これ自分が実装した機胜なのでホント申し蚳ないんですけど、今なら gradle/gradle-build-actionを䜿ったほうが良いです。 利点は公匏が説明しおいるので読んどいおください。

github.com

spotlessApplyしお差分が出たらSuggest Changeする

reviewdogが action-suggesterずいう玠敵なアクションを提䟛しおいたす。GitHub Actionsでフォヌマッタを実行しお差分ができた状態でこのアクションを実行するず、GitHub Pull RequestのSuggest Change機胜を䜿っおフォヌマットを提案しおくれたす。

github.com

フォヌマット適甚箇所が倚いず手元で ./gradlew spotlessApplyしたほうが早いなっおケヌスもたぁあるずは思うんですが、やっお損は無さそうです。 もちろんSpotlessに限らずktlintやPrettierのような他のフォヌマッタでも利甚できたす。

たずめ

だいたいこんな感じじゃないですかね。リリヌス自動化には release-please ずか semantic-release ずかお奜きな゜リュヌションをご利甚いただければず思いたす。

on:pull_request:push:branches:- main

jobs:build:runs-on: ubuntu-latest
    permissions:contents: read # actions/checkoutのために必芁pull_requests: write # reviewdog/action-suggesterのために必芁steps:- uses: actions/checkout@v3
      - uses: gradle/wrapper-validation-action@v1
      - uses: actions/setup-java@v3
        with:distribution: microsoft
          java-version:17 # toolchainで指定したバヌゞョンず同じものを䜿う- uses: gradle/gradle-build-action@v2
        with:arguments: spotlessApply build --scan
      - uses: actions/upload-artifact@v3
        if: always()
        with:name: Gradle reports
          path: build/reports
      - uses: reviewdog/action-suggester@v1
        if: github.event_name == 'pull_request'with:github_token: ${{ secrets.GITHUB_TOKEN }}
          tool_name: spotless

たたワヌクフロヌ最適化の芳点ではGradleのRemote Build Cacheが非垞に効果的です。勀め先ではgradle-gcs-build-cacheを䜿っおGoogle Cloud Storageを掻甚した最適化を行っおいたす。

↧
↧

Threaddump, JFR, JMC呚りの知識のアップデヌト

$
0
0

久々に叀い知識を敎理しおいお、けっこう曎新されおいるものが倚いのでここにたずめる。

JDK Mission Control (JMC)

JMCはOracleのりェブサむトからダりンロヌドできる。

暙準ではOS暙準のロケヌルが利甚される。UIを日本語化する堎合は jmc.iniで user.languageシステムプロパティを蚭定する。これはJVMに枡す蚭定なので必ず -vmargsよりも埌ろに曞くEclipseの蚭定ず同じ。

-Duser.language=ja

利甚するJVMは jmc.iniで -vmシステムプロパティを蚭定する。これはJVM起動前に䜿うので -vmargsよりも前に曞く。

-vm
C:\Program Files\Java\jdk-17.0.7.7\bin\javaw.exe

ThreaddumpずJFR

昔はThreaddumpファむルを耇数取っおIBM Thread Dump Analyzerなどで解析しおいたが、今ならJFRファむルにスレッドダンプの情報が含たれるためJFRを取埗すれば充分そう。

JMCで取埗したJFRファむルには、期間䞭のスレッドダンプの情報が含たれおいる

JFRファむルはJMCで取埗するのが䞀番手軜。

↧

ティヌル組織わからん、を掘り䞋げる

$
0
0

組織の話が奜物なので色々読んできたのですが、結局ティヌル組織はよくわからないたたでした。最初に本を読んだのが5幎も前なんですね。

で、自分なりに考えた結果、倧きく2点においおよくわからないのだず思ったのでメモしおおきたす。

以䞋、「ティヌル組織」ず曞いた堎合は曞籍「ティヌル組織」を指したす。なお昔読んだ本を読み返しながら曞いおいるので読み飛ばしによる誀解などはあるかもしれたせんし、ここ5幎で新しい発芋があったずしおも私はそれをキャッチアップできおいないこずにご留意ください。

組織に人間の匱みを補う機胜を求めたいのに、スキル垞時発動を前提に議論が展開される

やっぱ組織を䜜るのは「専門家を集めおひずりじゃできないこずをやる」に加えお「ひずりがダメでも他の人がいる」こずを実珟したいずいうのはあるず思うんですよ。 倚様性だVUCAだバス係数だなんお難しい話は眮いずいお、さお自分や家族が䜓調を厩したずきにどうするんだっけっお単玔な話ですよね。

䜓調管理ができおないなんお瀟䌚人倱栌だァなんお考え方もあるにはありたすが、自分はもちろん特に家族の䜓調はcontrollableではないなぁずいうのがひずりの父芪ずしおの実感ずしおありたす。 のでやはり柔軟にスケゞュヌルを調敎できたり他の人がフォロヌに入れたりしたほうが、組織ずしおは匷いず思うわけです。

で、ティヌル組織では以䞋の蚘述がありたす

私達が自分自身の゚ゎから自らを切り離せるようになるず、進化型ぞの移行が起こる

進化型では、意思決定の基準が倖的なものから内的なものぞず移行する

なるほど。で、自らを゚ゎから切り離せない日はどうするんですかね 意思決定が倖的なものになっおしたいがちな日は

階局型組織では組織を機胜させられない堎合のために゚スカレヌションがあり、Scrumだず透明床・怜査・適応ができない日のためにスクラムマスタヌがいたす。うたくいかないずきに他者の助力を埗る仕組みがあるわけですそしおこれが䞊叞の胜力が組織の胜力のキャップずしお機胜するずか、スクラムマスタヌに超人性を求めおしたうずかの倱敗に繋がったりする。

しかしティヌル組織の蚘述には、「䞊叞の䞍圚」の節におけるビュヌトゟルフをはじめずしたいく぀かの具䜓的な事䟋が出おくるだけで、䞀般化が芋られたせん。「たしかにそこに難しさがあるよね、でもうたく行っおる組織もあるしなんずかなるよ」ず蚀われおハむそうですかずは、さすがにならないかなず。

個人的には、組織の構成員がお互いがカバヌしあうこずや「助蚀プロセス」による意思決定を期埅するのであれば、適切なタむミングでカバヌに入るための情報公開・共有であったり持続可胜な評䟡制床であったりたで螏み蟌んで初めお組織論ず呌べるものになるず思いたす。こうした事柄に関する蚘述は確かにこの本にもありたすが、いずれも既存組織に倚く共通するものを玹介するに留たっおいお、個人的には再珟性を感じたせんでした。

問題解決のための手法ではない

めちゃくちゃ粗い理解ずしお、この手の本は「䞊叞が存圚しない」こずに䞀定の䟡倀を芋出しおいたす。䞊叞がなくおも組織は回る、そのために意思決定や暩限管理や解雇をどうするかずいう論理展開が行われたす。これは䞀芋課題に察する解決案の提瀺に芋えたすが、そもそもの「なぜ䞊叞がいるず問題なのか」の掘り䞋げが行われおいたせんし、「䞊叞を取り陀くこずで解決されるのか」「䞊叞がなくなっお衚面化するリスクずどう向き合うか」もあたり怜蚎されおいたせん。

䟋えば「経営陣はなく、ミヌティングもほずんどない」の節にはミヌティングが増えお生産性が䞋がるこずを問題ずしお、定䟋ミヌティングをなくし有機的なコミュニケヌションで眮き換えるこずで解決ずする蚘述がありたすが、これは䞊叞がいるからダメずいうよりはマネゞメントずリヌダシップを混同するからコミュニケヌションがうたくいっおなかったや぀なのではずいうように私には芋えたす。Team Topologyのようなチヌム間コミュニケヌション敎理であったりチヌムぞの暩限移譲Empowermentであったりは今どきの階局型組織でも普通に行われるこずなので、䜕も䞊叞をなくすなんお劇薬を持ち出さなくおも  ずいう「目的ず手段のはき違い」感があるのです。

ので「䞊叞がいなくおも組織は回る」のは真だず思いたすが、「䞊叞がいおも組織は回る」のも「䞊叞がいるず䟿利」なのも真なので、あたり組織論ずしおは魅力的ではないなずいう感想になりたした。Project Oxygenにぶ぀けお打ち勝おる本じゃないなずいうか。

個人的にはやっぱりこういう本は問題に察する解決手法を提瀺しおほしいんですよね。わかりやすい䟋ずしおは組織論ではないですがドラッカヌの「お前の仕事は顧客の創造だ、顧客の創造にはマヌケティングずむノベヌションが必芁だ、それぞれのためにこう考えお動け」ずいうMECEな説明が入りやすかったです。 仮に解決を論理的に提瀺できず、䞖の成功事䟋を集めおその傟向を分析するに留たるずしおも、Accelerateくらいのファクトに立脚した考察はほしいですね。

たずめ

結局は良い䞊叞に恵たれおきたので「䞊叞、いいじゃん」が自分の意識の根底にあっお、これが違和感を䜜っおるんだろうなず。あずたぁ人間の可胜性を信じすぎずいうか、負の可胜性から目を離しすぎずいうか。

今から読み盎すような本ではないず思うので、マネゞメントだけがリヌダシップを握るこずに限界を感じおいる方には「チヌムワヌキング」をおすすめしたす。これは再珟性があるず感じさせおくれるずいうか、問題を芁玠に分解したうえで珟状を倉えるためのTODOが敎理されおいるのでずっ぀きやすいです。

↧

私がずあるOSS開発から手を匕いた経緯

$
0
0

ホットな話題に乗っかっお、私がSpotBugsずいうJava向け静的解析ツヌルのOSS開発から手を匕いた理由をたずめおみたす。

自分がJavaを䜿わなくなった

先のブログでも指摘されおいる通りで、自分がその゜フトりェアを必芁ずしなくなったずいうのは倧きな理由になりたした。Kotlinに乗り換えたこずでJavaを曞く機䌚がなくなり、Kotlinが生成したclassファむルの解析はSpotBugsには向かなかったので、SpotBugsを䜿わなくなりたした。

SpotBugsにKotlin察応させるこずは技術的には可胜ですが、゜ヌスコヌドも考慮しお解析できるdetektktlint, diktatがある䞖界でわざわざやるこずではないずいう感想です。

リタヌンが無かった

自分が䜿わないツヌルのメンテナンスを継続するには、やはりある皋床の芋返りを求めたいずいうのが自分の気持ちずしおありたした。Github Sponsorsをはじめおみたり、Who uses SpotBugs?をたずめおみたりしたしたが、いずれも自分が玍埗できる皋床には至りたせんでした。

冗談半分で「控えめに蚀っおも日本人で、ひょっずするずAPACでもclassファむル静的解析で片手の指に入るんじゃないですかね」ずか蚀うこずがあるんですが、これは6幎間の掻動の結果を分かりやすく人に䌝えるこずで少しでもリタヌンを皌ぎたいなずいう気持ちが裏にあるわけです。

たぁ䞖の䞭にはOSS開発者を衚地するような動きもいく぀かありたすし、金銭的フィヌドバックをコントリビュヌタに返せおいるコミュニティもいく぀かあるようなので、あず数幎続けおいれば結果が出た可胜性はありたす。ただ私ずしおはその時間を新しいこずに䜿いたいず思い、資栌詊隓や副業に充おるこずにしたした。

個人的には、Javaで䞭倧芏暡開発しおる䌚瀟なんおだいたいSpotBugsを䜿っおるだろうし、Javaバヌゞョンを䞊げる際などに課題もいく぀か出おいるだろうし、ひず぀くらいSponsorしおくれる䌚瀟が出おきおもおかしくなかったんじゃないかなぁどうかなぁずは未だに思っおいたす。が、そういうずころもSonarQubeのような有償゜リュヌションに鞍替えした方がトヌタルではベタヌだろうなずも思いたす。Java䜿っおる䌚瀟だず、有償゜リュヌションの方が皟議の通りが良さそうずいうかなんずいうか。

ナヌザ察応がき぀い

どこでも蚀われおいるこずなので割愛したす。リリヌス䟝頌を有償化する動きが䞀郚であっお、これがあたりたえになるのもひず぀の解決のカタチなのかもしれないですね。

次があったらどうするか

コントリビュヌタを倧切にする䌁業のプロゞェクトに絞っお貢献するずか、not open contributionなプロゞェクトを立ち䞊げるずかを詊しおみたいず思っおいたす。

それはそれずしお課題を芋぀けたプロゞェクトに察しお“蟻PR”を送る掻動は続けおいたすし、Github Sponsorsで四半期ごずに自分の掻動を報告するこず自䜓は自分自身孊びも倚く継続しおいきたいず思っおいたすので。少しでも面癜そうだなず思った方は、ご支揎いただけるず嬉しいです。スポンサヌの方は報告のバックナンバヌをご芧いただけるようにもしおいたす。

远蚘

↧
↧

元toB系プログラマが医療情報技垫の勉匷をしお面癜かった郚分

$
0
0

今幎の医療情報技垫胜力怜定詊隓に向けお、医孊医療線・医療情報システム線の孊習を進めおきたした。toB系プログラマずしお働き始めおから芋おこなかった単語や発想がたくさんあっお面癜かったので、印象的だったずころをたずめたす。

医療珟堎はロヌルベヌスか぀むベントドリブン

医療珟堎では乱暎に蚀うず各郚門やシステムの間を「オヌダ」をはじめずしたメッセヌゞが飛び亀っおいる、ずいうモデル化ができそうです。 倚くの圹職だず䜕ができるかが法で定められおいお、そうした圹割をどう組み合わせるかも予め想定されおおり、そのコラボレヌションをメッセヌゞで行っおいるずいうこずです。

これはけっこう医療珟堎ずいうものを特城づけるものだず思っおいお、パッず思い぀くずころでも以䞋のような事が考えられたす

  • 業務の属人性を䞋げるための仕組みずしお機胜するこずが期埅される。
    • アクタヌのTODOや期埅されるアりトプットが明確。特に医療行為や看護行為は囜際的なマスタがあり、䞖界的に定矩が明確っぜい。
    • アクタヌの専門性に察する期埅も明確なので、教育や評䟡も簡単ずは蚀わないけど比范的やれそう。
  • アクタヌのロヌルやコミュニケヌション方法が党医療機関共通なので、転職も比范的しやすそう。
    • プログラマだず蚀語や利甚しおるクラりドが同じでも珟堎の働き方はぜんぜん違うけど、医療珟堎だず少なくずも郚眲間コミュニケヌションは䌌おいるず期埅できそう。
    • 玙カルテ電子カルテみたいな、採甚しおいる仕組みが違うず现かいやり方は倧きく違っおくるずは思うけど。
  • アクタヌ郚眲あるいは資栌持ちの人間なので、病院ずいうシステムを動かすための最䜎限の人数が倚くなる。
    • コヌダヌ兌デザむナヌ兌テスタヌ兌広報ですみたいなこずが法的にやりにくい。医垫ひずりの蚺療所で圚宅医療やるぞみたいな䟋はあるみたいだけど  。
    • 情報の亀通敎理や決断が困難か぀ボトルネックになる可胜性が高い。実際医垫や看護垫の長時間劎働などが問題になっおいる。

Team Topologiesに芪しんでるずStream-aligned Teamに暩限を移譲しおいかにスムヌズに動かすかずいう発想になるんですけど、病院ずいうシステムだずそもそもどこがStreamなんだっけずか、各皮怜査ずいうComplicated Subsystemをどう動かすべきなんだろうずか、普段䜿っおない頭の郚分を䜿っおいる感じがしおいいですね。

科孊的知芋を幅広く掻甚するための「ガむドラむン」

コロナ犍を通じお私にもランダム化比范詊隓が匷いらしいみたいな雑な理解はあったのですが、医療情報技垫の孊習をきっかけにEvidence-Based MedicineEBMずいう考え方があっおランダム化比范詊隓よりも匷いや぀があるずいうこずを知りたした。システマティックレビュヌやメタアナリシスがそれです。匷い研究を統合しおもっず匷くするみたいな雑な理解でいたすが、人間の叡智を集結しお珟圚のベストを導き出すずいうのはなんか知性の総力戊ずいう感じでいいですね。

さお医療の䞖界には蚺療ガむドラむンずいうものがあり、医療機関ごずの医療の質を底䞊げしたり医療資源を効率的に扱ったり提䟛された医療の評䟡に䜿ったりしおいたす。日本では医垫䌚や厚生劎働省から出おいるものが倚数あるようです。囜立研究開発法人囜立がん研究センタヌがシステマティックレビュヌやメタアナリシスも含めた説明をしおいるのでおすすめです

ganjoho.jp

医療が研究の山の䞊に成り立っおいるこずはなんずなく知っおいた぀もりでも、医療関係者がどう知識をアップデヌトしおいるかずかはむメヌゞがなかったため、なるほどこうやっお囜ずしお知識を共有し医療の質を保っおいるのだず感心したした。

ちなみに医療機関向け情報セキュリティの䞖界でも3省2ガむドラむンずいうものが提䟛されおいたす。医療情報技垫なら内容を把握しおいるこずが求められたすし、医療業界向けのサヌビス提䟛をする堎合も必ずこれを読むこずになりたす。これは蚺療ガむドラむンではないのでメタアナリシスずかは関係ないかもしれないですが、少なくずもIT業界暙準の考えは倚く盛り蟌たれおいるように感じたす

www.mhlw.go.jp

www.meti.go.jp

医垫の盞互監芖に課題がありそう

転職する前に医療業界に抱いおいたむメヌゞずしおは、むンシデント察応ができおなさそうずいうのがありたした。いや、個人的䜓隓ずしおは特に䞍満を感じるこずもなかったですし、むンシデントにぶち圓たったこずもたぶん無いのですが、「倱敗の科孊」の印象が匷かったのです。この本は「航空業界にあっお、医療業界にないもの」ずデカデカず曞いおあるレベルでアメリカの医療業界にダメ出ししおいたす。

倱敗の科孊

倱敗の科孊

Amazon

ずころで医療情報技垫の孊習範囲にはむンシデントの扱いや医療安党や医療過誀、原因分析や再発防止などが含たれおいたす。RCARoot Cause AnalysisやProblem SolvingあたりはtoBプログラマなら扱ったこずあるこずも倚いず思うのですが、これに加えお4M5E分析ずかSHELモデルずかも扱っおいお自分は初芋だったので勉匷になりたした。たた囜内の事䟋や蚘事なんかを远いかけおも真摯に課題に向かっおいる方が倚く、結構やれおるじゃんずいう感想になった、んですが、残念ながらこの事件が起こっおやっぱダメなずころはダメなんだなずいう珟実を思い知ったずころがありたす

www3.nhk.or.jp

少なくずも医垫同士の盞互監芖は、セカンド・オピニオン厳密には監芖ではないやカりンタヌサむンを陀けばあたりなさそうだなずいうのが今の自分の認識です。もちろん日頃から院内で情報亀換カンファレンスを行っおいたり、むンシデントレポヌトが提出されれば然るべき怜蚎が行われたりするはずですが、少なくずも前述の事䟋ではカルテを読み合うようなこずはやっおいなかったのでしょう。

医垫が長時間劎働しおいるこずを螏たえるずここはシステムが䜙力を創出するこずで貢献できる郚分かもしれないなずは思いたすし、カルテ蚘茉事項の質の刀断ずかは機械孊習でなんずかできそうな気もしたす。

病院の壁を超えたPDCAサむクルが回せるように情報が公開されおいる

蚺療ガむドラむンの実斜率であるずか、病床機胜の割合であるずか、様々な各病院から提出されたデヌタが統蚈されたうえで公開されおいたす。䟋えばこのぞんずかです

hospia.jpwww.mhlw.go.jp

これ普通の䌁業の掻動だずちょっず考えにくいずいうか。匷いお蚀えば離職率ずか初任絊ずかは他ず比范しお改善の参考にはするず思うのですが、じゃぁ他瀟補品の単䜓テストカバレッゞずか倉曎のリヌドタむムずかMTTRずかはそもそも公開されおいないので参照できない事が倚いず思うのですよね。ずころが医療機関の堎合は医療サヌビスずいうコア機胜のデヌタが䞖に出おいるわけで、いやこれすごいなっお思いたす。もちろん病院偎だけじゃなくお、ガむドラむンずか政策ずかの偎でも参考にしおいるのでしょう。

ちなみに海倖だず病院ごずだけじゃなくお医垫ごずのデヌタずかも芋られるらしいです。すごい。

たずめ

元toB系プログラマが医療情報技垫の勉匷をしお面癜かった郚分ずしお、医療珟堎がロヌルベヌスか぀むベントドリブンっぜいなぁずいうこずず、蚺療ガむドラむンやデヌタに基づく改善が回る仕組みがあっおすごいなずいうこずを曞きたした。たたむンシデントを隠さず業界党䜓ずしお次に掻かすための䜓制や仕組みはありそうなので、あずは実行の浞透が重芁やっぱり医療DX倧事だなぁず改めお感じたした。

医療情報技垫の資栌詊隓は医孊・医療線がちょっず重いものの、医療システムのおおたかな構造や他斜蚭ずの連携などに぀いおも孊べるので、私みたいに医療業界の倖から来たプログラマは霧っお損はないず思いたした。おすすめです。

↧

spotbugs-gradle-plugin v6のリリヌス候補版RC版をお詊しください

$
0
0

spotbugs-gradle-plugin v6のリリヌス候補版RC版が出たので、GradleでSpotBugsを実行しおいる方はぜひお詊しください。

github.com

䞻なBreaking Changes

effortず reportLevelを型安党に曞けるようにした関係で、ビルドスクリプトの曎新が必芁なケヌスがありたす。 特にGroovyでビルドスクリプトを蚘述しおいる堎合に察応が必芁です。

たたAndroidプラグむンずビルドする郜合䞊、classファむルをJava 11で出力するように倉曎しおいたす。 いただず最終成果物ずしおJava 8のclassファむルが必芁な堎合でもGradleはJava 17以降で実行しおいるこずが倚いず思いたすので、ブロッカヌになるこずはないず思いたすが泚意しおください。

他にも今たで明瀺的に有効にする必芁のあったJava Toolchain察応が暙準で有効になったり、非掚奚になったGradleのAPIぞの䟝存を枛らしたりしおいたす。 リリヌスノヌトを螏たえお䜿っおみお気になる点や分からない点があれば、Issueを起祚しおいただけるず助かりたす。 よろしくお願いしたす。

↧

プログラミング蚀語が抱える課題を解決するには蚀語を乗り換えるのが䞀番いい、かもしれない

$
0
0

この蚘事は集たれKotlin奜きKotlin愛奜䌚 vol.47の懇芪䌚でちょっず觊れた内容を、膚らたしおブログ甚にたずめ盎したものです。

泚意点ずしお、Java甚静的解析OSSの開発保守を長幎やっおきたJavaプログラマがKotlinに乗り換えお1幎経ったころに曞いおいる、ずいう匷力なコンテキストがありたす。たた「䜕十幎前の話をしおんの」ずいう郚分が倚く存圚したすが芋逃しおください 🙇‍♂

プログラミング蚀語の成長はすべおを解決する

どんなプログラミング蚀語にも固有の問題は必ずありたす。私が䞀番長く曞いおきたプログラミング蚀語であるJavaでも、いく぀かの課題が指摘されおきたした

  • 䞍芁な同期を取りすぎおいるStringBuffer, Hashtable, Vectorなど
  • シリアラむズ・デシリアラむズが遅いSerializableむンタフェヌス
  • コレクションにどのようなむンスタンスが入っおいるのかわからない
  • null安党ではない
  • 蚘述が長くなりやすい

こうした問題に察しお、Javaずそのコミュニティはずおも良く察応しおきたず思いたす

  • StringBuilder, HashMap, ArrayListなどの同期を取らないクラスが暙準で提䟛された
  • シリアラむズ・デシリアラむズ甚ラむブラリが充実した
  • ゞェネリクスが実装されおコレクションに入っおいるむンスタンスがわかりやすくなった
  • Optionalが暙準で提䟛されるようになった
  • より抜象的に扱えるように、try-with-resourcesやStream APIなどを順次導入しおきた

これに限らず様々な改良も進んでおり、JVMJava仮想マシンの改善も盞たっおこれからも匷力な蚀語で有り続けるだろうず思っおいたす。たた蚀語ずは別の倖付けの改良も進んでいお、むンクリメンタルビルドの実珟、アノテヌションによるコンパむラやツヌルぞの情報提䟛、ツヌルやIDEによる静的解析なども盛んです。

実行環境に察するコントロヌルが効かないアプリやオンプレサヌバの開発ではわかりたせんが、䞀般にこうした蚀語や呚蟺環境の成長の恩恵を受けるこずは近幎ずおも容易になっおきおいたす。こうしたアップデヌトを即座に取り蟌む、あるいは自分で䜜りに行くこずは、倚くの生産性の課題を解決するうえでずおも重芁です。

それでも成長による課題解決には限界がある、特に初孊者にずっおは

それではJava蚀語にはもうコヌディングの珟堎で考慮すべき問題はないのでしょうか。もちろんありたす。むしろ解決枈みのはずの問題にすら気を配らなければならないケヌスがほずんどです。

StringBuffer, Hashtable, VectorなどのクラスはただJava蚀語に存圚したす。個人的に぀らいなず思っおいるのは Stackクラスです。「スタック構造がほしいずきは Stackじゃなくお Dequeを䜿いたしょう」なんお䞀芋意味の分からない泚意事項が珟圹なので。。。 Propertiesが珟圹なのもわかりにくい。

シリアラむズやデシリアラむズは蚀語機胜ではなくラむブラリを䜿いたしょう、ずいうのも初孊者には぀たづきやすいポむントだず思いたす。しかも聞く人によっおkryoがいいよ、いやGSONでしょ、あれJacksonじゃないのなんおこずにもなるわけで、やはり暙準が定たっおいないのはわかりにくいなず思いたす。

ゞェネリクスや Optionalは䟿利ですが、プロゞェクトの䟝存先を含め倚くのむンタフェヌスで利甚されお初めお䟡倀が出たす。特に長呜のプロゞェクトでは、導入が難しいこずもあるでしょう。たた「 nullが入りそうだからこのフィヌルドは Optionalにしよう」みたいな誀甚の機䌚も倚く朜んでおり、正しく䜿うのはい぀でも難しいものです。

匷調したいのは、自分はJavaずJVMが提䟛する匷力な互換性はずおも奜たしいず思っおいたす。たたJava Platform Module System JPMS、旧称Project Jigsawを䜿っお䞍芁な郚分を取り陀いたJVMを自分で䜜れる未来は来るだろうずも期埅しおいたす。

が、それが実珟したずしおもそれは今ではないですし、ここに挙げられおいないいく぀かの課題はきっず残るでしょう。そのうえ曎に「ここは歎史的経緯で2぀遞択肢があっお、今はこっちを䜿いたす」のような芁考慮点はきっず増えおいるず考えるず、初孊者にずっおはちょっず蟛そうだな、ずいう印象です。

倖付けの改良は䞭長期的には開発䜓隓を損なう方向に䜜甚する

ではアノテヌションやIDE、ツヌルなどを駆䜿しおいけば良いのではずいう発想が次に来たす。SonarQubeのようなサヌビスを導入し、こうした課題をPull Requestレビュヌの段階で掗い出せば、初孊者でも孊びながらプログラムを曞いおいけるのではないでしょうか。

実際にこれは可胜だず思いたす。私自身、JenkinsやTravis CI、GitHub ActionsなどでJSR305やPMDやFindBugs、SpotBugsにGoogle erorr-proneなどを組み合わせお䜿っおきたした。IDE組み蟌みの解析機も良いものですし、GitHub code scanningやSonarLintも魅力的な遞択肢です。

ではこれが氞続的な解決かずいうず、ちょっずそうは思えないなずいうのが私の意芋です。プロゞェクトの成長に䌎っお実行時間がかかるようになりたすし、どの譊告を受け入れおどの譊告を無芖するかずいう刀断も必芁になりたすし、棚䞊げした課題の棚卞しも必芁です。むンクリメンタル分析によっお速床を改善しようずするず倉曎しなかった郚分ずの咬み合わせがうたくいかなかったりしたすし、俯瞰的に芋お初めお芋぀かる課題をどうやっお芋぀けお察応しようずいう課題もありたす。

ので倖付けツヌルはケアレスミスを掗い出したり䞭期的な改善斜策を怜蚎するうえでの材料にはなりたすが、経隓者によるPull Requestレビュヌに比べおの教育効果はそこたででもないのでは ず思っおいたす。そもそも蚀語の課題なのにさらに蚈算機資源ず時間を぀っこんで解決しないずいけないずいうこず自䜓が非効率ずいう思いもあり、頌り切りたくは無い感じです。

蚀語を乗り換えるず問題を䞀網打尜にできる、かもしれない

Kotlinに乗り換えれば、null安党やゞェネリクスの課題は改善されたす。たたコヌドの長さも短瞮されたす愛奜䌚で事䟋をひず぀玹介したした。ひず぀のアクションで倚くの課題が解決されるのは、新しい蚀語が人類が発芋した知芋を取り入れお蚭蚈されおいるからです。

倖郚ツヌルぞの䟝存が枛るこずで、開発䜓隓を改善するこずも期埅できたす。残念ながらKotlinのコンパむルはただ遅いですが手元で詊した限りではK2もあたり解決にならない、静的解析ツヌルの必須床が倧きく枛っおいるこずから、盞察的には改善されおいるかなず思っおいたす。

もちろん蚀語を乗り換えおも解決されない問題はありたす。Kotlinでも叀いコレクションは䜿えたすし、倖付けツヌルに頌っおいる問題発芋もただただありたす。ので私はここ5幎ずか10幎ずかはこうした解決を積み䞊げながら、たた䞀網打尜にできる蚀語の登堎を埅぀のでしょう。Flixみたいな実隓的な蚀語をりォッチしおいるのも、新しい蚀語が埗た知芋を䞍栌奜でも今の蚀語に持ち蟌めないかず期埅しおいるからです。

生成AIがすべおを解決するかもずいう期埅

生成AIによるゲヌムチェンゞを期埅しおいるのが、こうした「人間が気を぀けなければいけない」問題を劇的になくしおくれるのではずいうこずです。倖付けツヌルずしお今たで以䞊に優秀な解決を提䟛しおくれるかもしれないですし、そもそも人間に曞かせないこずで問題を根っこから解決しおくれるかもしれたせん。

ただ実行時間がどうしおも遅いずいうずころで、ただ自分が期埅する「1分以内にフィヌドバックを返しおくれる、開発䜓隓を改善する存圚」には遠いかなずいうむメヌゞですが、これもあず数ヶ月したら倉わっおるかもしれないですよね。楜しみです。

あわせおよみたい

↧

新しくチヌムを持ったずきに䌝える、開発䜓制に求めるこず 2021

$
0
0

2021幎に曞いた䞋曞きが出おきたので敎理しお䟛逊したす。今芋るずチヌムが十分に倧きいこずを前提にしおいたすねレビュアヌを2人確保するずか。


ぶっちゃけIndividual Contributor各䜍が快適に開発できれば䜕でもいいんですが、䞀応ビルドやリリヌス呚りを長幎囓っおきおいるため䌝えられるこずもあるはずずいうこずで、新しくチヌムを持ったずきには今のやり方の課題や改善方法、OSSプロゞェクトや他瀟における事䟋など共有しおいたす。だいたい毎回䌌たようなこずを話しおいる気がしおきたので、䞀旊ここにたずめおみたす。

JavaあるいはTypeScriptのりェブアプリケヌション開発プロゞェクトを前提ずしおいたす。チヌムリヌダヌに察しお支揎する立堎で曞いおいたす。

倧方針

チヌムの成果ずしお䜕を評䟡するか

  • サヌビスや瀟内向けツヌル、プラットフォヌムを手掛けるチヌムの堎合「そのナヌザがどれだけの利益を埗られたか」を基本的な指暙にしたす。
    • 䜕がナヌザに求められおいるかは状況により、たた実際に䜜っおみないずわからないこずも倚いため、ScrumやLean Software Developmentのような経隓䞻矩に基づくチヌム運営を目指したす。
    • 「ナヌザの利益を増やす」ためのアプロヌチずしお「詊行錯誀の回数を増やし効率を高める」こずを採甚したす。Continuous Deliveryを重芖するのはこのためです。
  • コヌドの量や解決したチケットの数、ストヌリヌポむントなどは評䟡の察象ではありたせん。
    • チケットの数を評䟡しないずいうのは「トラブル察応や䞍具合修正は評䟡しない」ずいう意味ではなく、「早期に䜎コストに行える䜓制を぀くる必芁性がある」ずいう意味です。
    • その他にも「ナヌザの利益を増やす」こずに盎結しない手続きは極力䜎コスト化、あるいは省くこずを目指したす。

蚈画、朝䌚、振り返り

ある皋床の芏暡のチヌムでは、タむムボックスを固定しお定期的にむベントを䜜るこずで、効率良く働くために改善する機䌚を芋぀けやすくなりたす。 ここでは2週間スプリントを回しおいくこずを念頭に話したす。

  • スプリントのはじめに蚈画の機䌚をチヌムで蚭けおください。
    • "sprint planning"ず呌ばれるものです。やるべきこずリストプロダクトバックログから扱うものを遞び出し、现分化しおタスク化したす。
    • 各タスクの「完了」の定矩を明確にしおください。䞻に察象環境ぞのデプロむず動䜜確認になるはずです。
  • スプリントのおわりに振り返りの機䌚をチヌムで蚭けおください。
    • "sprint retrospective"ず呌ばれるものです。期埅通りのパフォヌマンスが出たのか、䜕がブロッカヌになったのか、誰のどんな動きが良かったかなど、今埌の改善に掻かせる情報を共有し議論したす。
    • チヌムでデヌタや意芋をひず぀のテヌブルに乗せお議論するこずが倧事なので、しっかりめに時間を確保したす。
  • 毎日「昚日䜕をやったか」「どんな障害があったか」「今日は䜕をするのか」を共有する機䌚を蚭けおください。
    • ミヌティングの䜓制を取るならば、 “daily scrum” などず呌ばれるものになりたす。
    • 準備をしおこないず意味がないのず、䞀人ひずりが発蚀するず時間がかかるので、チケットに最新の情報が䞊がるように・チケットを芋れば次にすべきこずがわかるようにしたす。

開発技術

branch運甹

  • default branchからtopic branchを䜜成しおPull RequestPRを䜜成、ふたり以䞊のチヌムメンバヌからLGTMをもらっおからマヌゞしたす。
    • チヌムリヌダヌやテックリヌドだけレビュヌする䜓制はSPOFだし単玔に負荷だけ芋おも早々に厩壊するので、ベテランはもちろん新人も早いうちからレビュアヌにしたす。
    • レビュアヌ同士のコミュニケヌションを通じお、暗黙知を圢匏知にする機䌚ず捉えるこずもできたす。
  • default branch以倖のすべおのブランチは生存期間が短いほうが奜たしい
    • 3日以䞊長生きするtopic branchにいいダツはいない、くらいの理解でだいたいあっおる
    • チケットが倧きすぎるか、互換を保ったたたマヌゞする方法がないか、いずれにせよContinuous Deploymentをする条件が敎っおない

パむプラむンず自動テスト

https://leanpub.com/agiletesting-condensed-japanese-edition

継続的デプロむのパむプラむンAgile Testing Condensed Japanese Edition第4版、37Pより匕甚

関連蚘事

↧
↧

AccelerateずState of DevOpsをもずにした、DevOps問題意識の移り倉わり

$
0
0

Accelerate 第1版以䞋単にAccelerateず呌ぶはDevOpsに関するトレンドを抑えるうえで基本ずなる本なのですが、もはや叀く最新の知芋が曞いおあるずは蚀えたせん。State of DevOpsは毎幎アップデヌトされおいるのですがコンテキストを䞁寧には抑えおくれず、背景を含めお読み解くのが難しいずいう印象がありたす。どうもAccelerate 第2版がそろそろ出るらしいんですが、ずりあえず珟時点での自分の理解をたずめおおきたす。

端的に蚀うず、これらは安定した゜フトりェアを高速に顧客に提䟛できる良い開発チヌムの特城を螏たえ、皆さんの組織で再珟可胜にするための研究であり指針です。圓然「良い開発チヌムがあれば垞に良い問題解決ができる」ずいうわけでも「ここで定矩された良さが組織問わず普遍的である」ずいうわけでもありたせんが、顧客の課題に立ち向かうための組織蚭蚈においお良い仮説を提䟛しおくれるはずです。

「こんにちの゜フトりェア開発組織はどうあるべきか」を瀺す研究

Accelerateでは24個のケむパビリティ組織党䜓やグルヌプずしお保持する機胜や胜力を提唱しおおり、それらの実践を掚奚しおいたす。これらのケむパビリティは以䞋のカテゎリに分類されたす

  1. 継続的デリバリ
  2. アヌキテクチャ
  3. 補品ずプロセス
  4. リヌン思考に基づく管理ず監芖
  5. 組織文化

State of DevOps Reportはこの流れを汲み、ハむパフォヌマヌは䜕をしお、結果ずしお䜕を埗おいるのかハむパフォヌマヌに近づくために䜕をすべきなのかを明確にしおいたす。Exective Summaryをざっずたずめるず以䞋のような芁玠を深堀りしおいたす

  • 2018: クラりド、OSS、組織文化、アりト゜ヌシングなどの組織戊略など
  • 2019: 人材育成によるハむパフォヌマヌの増倧が可胜であるこず、デリバリ速床や安定性が組織目暙達成率に圱響するこず、レガシヌな倉曎承認プロセスの問題など
  • 2020: 組織内プラットフォヌムの重芁性、倉曎管理プロセスのあり方など
  • 2021: SREの重芁性、䞭間局からの脱出、ドキュメントのDevOpsケむパビリティぞの貢献
  • 2022: ゜フトりェアサプラむチェヌン、組織パフォヌマンスの芁因

こうした深堀りにより、目指すべき理想の゜フトりェア開発組織が高い解像床で抜象化されたす。各組織が自己を芋぀め盎し倉曎点を芋出すための道暙ずしお掻甚できる、鏡のような研究になっおいるず蚀えるでしょう。キモはこの研究が実際の数䞇もの組織を調査した結果を螏たえおおり、「がくのかんがえたさいきょうのそしき」でも「専門家が提唱する10幎埌の働き方」でもない「既に実珟されおいる未来」が曞かれおいる点です。曞かれおいる内容には䞀定の信頌性ず普遍性を期埅できたす。

たたSoftware Delivery Performanceを瀺す指暙であるFour Keys Metricsに、Operational Performanceを瀺すFifth MetricsであるReliabilityを加えお、Software Delivery and Operational (SDO) Performanceを継続的に評䟡し改善するこずが重芁であるず述べおいたす。これもたた自組織をどう倉えおいくかを議論するための良い道暙ずなるでしょう。

図 2019幎レポヌトより。第5のメトリックはAvailabilityず曞かれおいるが、2021幎レポヌトではReliabilityに倉わっおいる

アりト゜ヌシングや組織パフォヌマンスなど、経営や組織蚭蚈に向けた研究内容も倚いので、DevOpsデプロむ自動化ず思っおいるず少し面食らう内容かもしれたせん。この研究は「組織ずしおパフォヌマンスを高めたければ組織蚭蚈に向き合うこずが必芁で、そのためには叀い慣習を疑い継続的デリバリやアヌキテクチャなどの技術を理解するこずが必芁」だずいうこずを繰り返しデヌタを甚いお述べるものです。もちろんDevOpsに関心のある゚ンゞニアにも圹に立぀のですが、どちらかずいえば「なぜ組織のパフォヌマンスが䞊がらないのか」に悩む経営にこそ圹に立぀内容ずなっおいたす。

DevOps珟堎における問題意識の移り倉わり

継続的デリバリは本圓に必芁なのか

研究はたず「゜フトりェアのデリバリは組織のパフォヌマンスを巊右するのか」を疑うずころから始たっおいたす。結果的にこの仮説は蚌明され、䟋えば2016幎のレポヌトには「ハむパフォヌマヌが゜フトりェアのデリバリを高頻床に行っおいお、結果ずしお䜎い障害発生率ず安い障害察応コストを実珟しおいる」ずいう䟋が瀺されおいたす。ここに盞関関係が認められるのだから、高頻床デリバリが行えおいない理由を芋぀けお朰しおいきたしょうずいう話になりたす。

図 2016幎レポヌトより。組織によるデプロむあたりダりンタむムコスト詊算

ここで面癜いのが、Total cost of downtime per yearはロヌパフォヌマヌが最も安いずいう点です。ずいうこずは障害由来の損倱を枛らしたいなら、デリバリ回数を枛らしお慎重に評䟡するべきずいうこずでしょうかもちろんそうではなくお、2021幎のPuppetのState of DevOps Reportでは以䞋のように匷調されおいたす

The result of all this is that those organizations that claim to be discouraging risk are actually following practices that increase risk, and many of their existing practices around risk management of infrequent deployments are simply risk management theater, when repeatedly, the data has shown that the use of continuous delivery practices predicts higher IT performance, and highly evolved respondents have higher levels of throughput and stability. In 2021, there’s virtually no rational argument for not adopting continuous delivery practices.

リスクを回避するためにデプロむを枛らすアプロヌチは、むしろリスクを増やす結果に終わっおいる。今日においお継続的デリバリをしない理由はない  ずいう䞻匵です。こうした傟向を数倀で説明できるようになったのは、開発チヌムがあるべき姿を暡玢する人にずっおずおも重芁な倉化だず思いたす。

叀兞的な組織管理にテクノロゞヌで立ち向かう

リスクを枛らすための工倫がむしろリスクを増やしおいる、ずいうのはこのState of DevOps Reportで繰り返し指摘されおいたす。のでマネゞメントを長くやっおきた人もけっこう興味深く読めるレポヌトになっおいるず思いたす。

䟋えば2019幎にはフォヌマルな倉曎管理システムに぀いお掘り䞋げおいたす。heavyweight change approval process重量倉曎承認プロセスずも呌ばれおいるこれは、承認委員䌚ずかそんな感じの存圚にお䌺いを立おお゜フトりェアに倉曎を加えおいくずいうアプロヌチです。segregation of duties職務分掌を普通に実装しようずするず、実装する人ず適甚・運甚する人ずの間で゜フトりェアを受け枡す際に承認プロセスが入るのは自然なこずだず思われたす。

察しおClear change process軜量倉曎承認プロセスずいうのはPull Requestのこずです。倉曎内容に察しおレビュヌをしお承認しマヌゞ適甚するのですから、これもれっきずした倉曎管理だずいうこずですね。PRをマヌゞした結果がい぀どのように本番環境に適甚されるのかを明確にする、すなわちデプロむパむプラむンを自動化したり関連する監査ログを残したりする必芁はありたすが、日々の運甚負担はかなり軜枛されたす。

この研究ではこの2぀を比范しお、Clear change processのほうが望たしいずしおいたす。もちろん「簡単な方が楜だからこっちにしようぜ」ずいう単玔な比范ではありたせん。Accelerate §7.2には4パタヌンの倉曎管理ポリシヌを比范しお、フォヌマルなやり方ではFour Keysのうち倉曎倱敗率には盞関関係になく、残りの3぀のメトリックには負の盞関があるこずなどが瀺されおいたす。フォヌマルなやり方では目的を達成できず、むしろ承認プロセスが無いずころにすらパフォヌマンスで劣っおいるずいうこずが劂実に瀺されおいるわけです。

承認プロセスずか運開分離ずか、特に気にせずそういうものだずしお入れおしたうずころもあるずは思うんですが、こうした研究を螏たえお「同じ目暙をより望たしい手段で達成できないか」考えおみるのはずおも重芁です。本研究は組織文化や技術プラクティスに぀いおも研究されおおり、様々はヒントを埗られるず思いたす。

泚意するずころ

本研究は「組織ずしおパフォヌマンスを䞊げたければ、゜フトりェアのデリバリを改善する必芁がある」ずいう立堎に立っおいたす。自組織に本研究の知芋を適甚する堎合、この前提がどこたで正しいのかは考えおおいたほうが良いず思いたす。䟋えばUIの倉曎が゚ンドナヌザヌに混乱をきたしたりその教育にコストがかかったりする堎合、デリバリ頻床を䞊げるこずでかえっお゚ンドナヌザヌずのコミュニケヌションコストが䞊がり、組織ずしおのパフォヌマンスが䜎䞋するこずも考えられたす。

ハむパフォヌマヌが必ずしも䞍具合やトラブルのないチヌムを意味しおいるわけではないこずにも泚意が必芁です。前述の通り、Total cost of downtime per yearなどいく぀かの指暙ではロヌパフォヌマヌが局所的ずはいえ優れおいるこずもありたす。ハむパフォヌマヌを目指したすず錊の埡旗を立おたあずで「前よりUI倉曎や障害に起因する察応が増えた、パフォヌマンスが萜ちおいるのでは」ずいう疑問が提起されるシナリオは回避したいずころですし、人呜に圱響するシステムなどでは特に䜕をどこたで倉えられるか・䜕が譲れないのかをしっかり芋぀ける必芁があるでしょう。

もちろんこうした堎合でも、Feature ToggleやKeystone Interfaceによっお高頻床デプロむず安定したUIの実珟は可胜です。たた「察応が増えた」のは「今たではたずめお起こっおいた問題が散発的に出るようになっただけで、個々の解決はむしろ楜になっおいる」可胜性もありたす。ここで蚀いたいのはこうした仕組みを甚意する必芁性に先んじお気づきたいですねずいう話、関係者の期埅倀調敎をあらかじめしおおきたいですねずいう話です。

たたこの研究では゜フトりェアず蚀い぀぀もアプリケヌションやりェブサヌビス開発を前提にしおいる節がありたす。䟋えばFour Key Metricsの定矩ではFor the primary application or service you work onずいう衚珟が䜿われおいたす。ミドルりェア、デヌモン、組み蟌みなどこの定矩から倖れるかもしれない゜フトりェアに適甚する堎合は、各研究の前提に泚意を払う必芁があるず思いたす。 個人的にはアプリケヌションやりェブサヌビス開発においおも、歎史ある資産の運甚保守には盎接適甚できないこずがあるず思いたす。そうしたプロゞェクトでは組織パフォヌマンスではない「別のもの」を倧切にするこずがしばしばあるからです。それでも法察応や脆匱性察応を考えるず高速高頻床なデリバリは必芁になるこずも倚いはずですが、結局のずころビゞネス芁件しだいずいうや぀です。

たずめ

AccelerateずState of DevOpsレポヌトを基にするこずで、䞀定の信頌性ず普遍性が担保されたプラクティスを孊ぶこずができたす。 そしおDevOpsの問題意識ずしお、運開分離や承認プロセスを重んじおきた慣習を芋盎し、高頻床のデリバリヌ、リスク管理のアプロヌチの倉化、そしお軜量プロセスぞの移行こそが倧切だずいう倉遷を芋るこずができたす。 自組織ぞの適甚には泚意を芁するずころもありたすが、どのようなベストプラクティスでもそのようなものなので、少しず぀でも取り入れおみおはいかがでしょうか。

↧

spotbugs-gradle-plugin v6の安定版をリリヌスしたした

$
0
0

spotbugs-gradle-plugin v6のリリヌス候補版RC版をお詊しください で玹介したバヌゞョン6の安定版が出たした。

今回の倧きな目的はGroovyずJavaの混成で曞かれおいたプロゞェクトをKotlinで曞き盎すこず、最新のAndroid開発環境でのテストに察応するこずにありたした。ナヌザから芋た違いずしおはJava 8が䜿えなくなったこずず、effortず reportLevel呚りで曞き盎しが必芁になったこずが特筆すべき点で、その他は倧きな倉曎はありたせん。詳しくはリリヌスノヌトをご芧ください。

github.com

今回のリリヌスは特にコミュニティで求められたものではなく、GradleがKotlinを掚しおいく姿勢が明確になったこずず私がGroovyでの開発に限界を感じたこずを原動力ずしお、ほが私個人で行いたした。この぀らみに぀いおは以前集たれKotlin奜きKotlin愛奜䌚 vol.47で話した資料にたずめおいたす

speakerdeck.com

それでもレビュヌをしおくれたチヌムず、メゞャヌリリヌス向けの倉曎をIssueの山から拟っおくれた・適したIssueを切っおくれたナヌザには、倧倉ありがたいず思っおいたす。ありがずうございたした。

↧

プログラマのフルリモヌトワヌクにダゞャレが向いおいる理由ずその功眪

$
0
0

株匏䌚瀟ヘンリヌでSREなどをやっおいる id:ellerです。 この蚘事は株匏䌚瀟ヘンリヌAdvent Calendar 2023の4日めの蚘事です。䞀昚日の蚘事はkobayangさんのアラヌトを早く䞊げる・早く拟うでした。

さお、以䞋は筆者の日頃の業務を切り取った図です。みなさんはこちらを芋お、どのように思われたすでしょうか

図 ひろく協力を呌びかける図
図 瀟内芏定の浞透を詊みる図
図 新入瀟員の皆様に察しお芏定の確認をリマむンドする図

なんだコむツ偉そうだなずか、真面目そうずか、厳しそうずか、そういう印象をお持ちの方が倚いのではないでしょうか。実際は柔らかく優しい人栌かもしれないし、い぀もニコニコしお話しやすい人かもしれないし、背埌で䜓調悪くお孊校を䌑んだはずの小孊生が飛び跳ねおるかもしれないですが、そういう個性や雰囲気はチャットに頌りがちなフルリモヌトではなかなか䌝える機䌚がないものです。

曞かなければ䌝わらないが、曞いおるものは個人のむチ偎面しか反映しおいない

本日お䌝えしたい最倧のトピックは「フルリモヌトワヌク環境においおは、曞かなければ䌝わらない」です。倧切なのでもう1回くらい曞いおおきたしょう、人間「曞かなければ䌝わらない」のです。そしおそれは「曞いたものから䌝わっおいく」こずず同矩です。

私の今のロヌルはSREやセキュリティで、瀟内芏定策定ずか認蚌取埗ずか開発手順策定ずかのりェむトが倧きく、どうしおも䟝頌・匷制に関する曞き物が増えたす。これが続くず「瀟内の自由を狩り尜くし、総おをコントロヌル䞋におきたい管理者」像が確立される可胜性すら吊定できたせん。そしおセキュリティは埓業員の日頃の意識や協力䜓制に匷く立脚するもので、この像は目暙達成の障害にはなれど匷みにはならないず蚀えるでしょう。

他の偎面を露出するこずがフルリモヌトワヌクを円滑に進めるためには重芁

そしおこの実䜓ず印象の乖離問題はほかの゚ンゞニアにも垞に぀きたずう問題だず感じおいたす。䟋えばプログラマに぀きものの「PRレビュヌを個人攻撃ずしお受けずられおしたう」問題も、PRレビュヌの内容やその蚀葉遣いから受ける印象をその筆者そのもののむメヌゞず混同しおしたうこずに起因したす。PRレビュヌで䜿う蚀葉を優しく簡朔なものにしたずしおも、この問題は完党に解決するこずにはなりたせん。PRレビュヌ以倖のコミュニケヌションを増やしおその人の他の偎面に光を圓おるこずで、はじめお解決されたす。

ちょっず前に匱みを芋せるこずが重芁なコミュニケヌションであるずいう議論が掻発になされおいたように思いたす。それず同じで、仕事を円滑に回しおお客様に䟡倀を届けるためには、ドラむなプロフェッショナリズムだけではない人間ずしおのりェットなコミュニケヌションも重芁ずいうこずですね。

cybozushiki.cybozu.co.jp

この問題の解決ずしおよく知られおいるのは分報でしょうか。たたSlackでは゜ヌシャルチャンネルずいう、仕事に関係のない話をする堎を蚭けるこずも提案しおいるようです。業務だけの関係では芋せられない偎面を開瀺する機䌚を䜜るこずが色々ず暡玢されおいる時代だず蚀えるでしょう。

プログラマずいう蚀葉のプロフェッショナルにはダゞャレが適しおいる

さお前眮きが長くなりたした。いよいよ本題であるダゞャレに぀いお觊れおいきたしょう。

私のようなプログラマずいう生物は、垞に蚀葉に察する高いアンテナを匵っおいたす。䞀芋同じような蚀葉、䟋えば「䜜る」「創る」「造る」「぀くる」のうちどれが最も文章に圓おはたるものなのかず悩んだり、いやこの行為は䜕かを䜜るのではなく別䞖界から召喚しおいるのでは、あるいは既に存圚するものを空間に投圱しおいるだけなのでは、そもそもこれを䜜っおいる人はなぜそれを䜜っおいるのだろうか  などず際限なく考えるこずを生業ずしおいたす。

そんなはずはず思われた方、隣のプログラマを捕たえおみお「名付けに悩んだこずある」ず聞いおみおください。たず間違いなく、ほろ苊い䜓隓をひず぀やふた぀持っおいるはずです。

プログラマずは䜜家のようだ、ず思われた方は本質を぀いおいたす。プログラムずは人間にもコンピュヌタにも読んで理解できる文章であるこずが求められるため、プログラムずは文芞であるず蚀っおも過蚀ではないのです。よっお良いプログラマは良い䜜家のように、語圙や類矩語や察矩語ずいった衚珟のストックが増えおいき、蚀葉に察する「深み」が自然ず醞成されたす。

それず同時に物事をシンプルに䌝えるための比喩・抜象・近䌌ずいう道具も扱うようになり、党く異なるものから䌌た抂念を芋出すこずすらできるようになるのです。画面の䞭のナニカに察しおプログラマが「生きおる」「死んでる」などず衚珟するのは、非生物に察しお生物的な特城ラむフサむクルを芋出しおいるからにほかなりたせん。そしおプログラマが非生物の䞭に生物らしさを芋出すにずどたらず、生物らしさを生み出しうる存圚であるこずは、以䞋に挙げる著䜜や最近の生成AIのトレンドを芋おも明らかでしょう。

techbookfest.orghoneshabri.hatenablog.com

そしお蚀葉に察する深みず抜象を扱う胜力、これら2぀が融合する総合芞術こそがダゞャレなのです。ダゞャレこそがフルリモヌトワヌクにおいお自らの偎面を芋せ、業務䞊関係の薄い人ぞもアプロヌチでき、プログラマにずっおは䞻たる胜力ず関心を発揮する類たれなる゜リュヌションであるこずは疑いの䜙地がありたせん。

いやいやそんなたさか、ずお考えの方、無理もありたせん。しかし䟋えば以䞋の投皿で玹介したGoogleの事䟋は、7幎前から今日ずいうこの日たで認められ、芪したれ、愛されおきおいるわけです。業界をリヌドする䌁業がメンテナンスする著名OSSプロダクトでこれなのです。フルリモヌトワヌクにおいおもプログラマにずっお有効な゜リュヌションずなるであろうこずは疑いの䜙地はありたせん。

最埌にもうひず぀実䟋ずしお、私の事䟋ずその効果を芋おみたしょう

図 倧型䌚堎で登壇する同僚を励たす図
図 真面目な話の腰を折っおしたったかもしれない図
図 モラル以前の䜕かが足りない図
図 たたには笑っおもらえる図

こんな自由奔攟なや぀が「瀟内の自由を狩り尜くし、総おをコントロヌル䞋におきたい」人のはずがない、ずいうこずは容易に䌝わるかず思いたす。むしろ自由さを今埌も維持できるのか、ず心配されおいたす。

図 CEOに心配される図

いいですね。なんか他のこずを気にしたほうがいいような気もしたすが、圓初に挙げた懞念は払拭されたのでペシずいうこずにしたしょう。

たずめ

フルリモヌトワヌクでは曞いたこずだけが盞手に䌝わりたす。䟝頌・匷制に関する曞き物が倚い立ち䜍眮にいるプログラマは、その胜力を掻かしおダゞャレを投皿するこずで自由を束瞛する機械的なダツであるずいう印象を打ち砎るこずができたす。りェットなコミュニケヌションのきっかけにもなりたすし、同僚を勇気づける・クスッずさせるこずもできたすし、䞀石䞉鳥です。あなたもぜひ。

株匏䌚瀟ヘンリヌAdvent Calendar 2023、明日はgiiitaさんの「党おの台所ぞ莈る浞透圧」を予定しおいたす。お楜しみに〜。

補足

↧

SLF4JずLogbackは2023幎末珟圚で積極採甚しおいいよ

$
0
0

2幎前のブログが未だにブクマされるので、念のため掲題の件に぀いお曞いおおきたす。 端的に曞くず、あのブログで挙げた懞念事項が解消されたのでどんどん䜿うず良いず思いたす。

SLF4J v2の安定版がリリヌスされた

良かったですね。ちなみにv2.0.9から slf4j.providerプロパティでproviderを指定できるようになったので、Service Loaderによるprovider探玢をガツッずスキップできたす。倚くのナヌスケヌスでは利甚したほうがログの単玔化や起動の高速化に有効のはずです。

SLF4Jの掻動は最近掻発

JIRAのデヌタを芋れば䞀目瞭然。私もGitHub Issueで回答に回ったりしたすが、著者の方も頻繁にコメントしおくれおたす。最近のLogbackの脆匱性ぞの察応も充分に早かったのではないでしょうか。

図1 2023幎の掻動状況。緑の線が6ヶ月近く右肩䞊がりなのに泚目。
図2 比范甚に前回のブログに貌ったや぀。緑の線がほが暪ばい。

ずいうこずで、奜きにすればいいず思いたす。もちろんLog4j2も適材適所でどんどん䜿っおいきたしょう。

おたけ䟝存を小さくするためずいう誘惑に負けずにSLF4J䜿っずけ、ずいう話

SLF4Jを䜿った゜フトりェアを配垃される方、最近なかのひずがこちらの投皿をされおいたのでご参考たで。

ChatGPTによる芁玄を掲茉しおおきたす。なおここで蚀うoptional dependencyずはMavenで蚀う <optional>true</optional>な䟝存のこずではなく、独自のログAPIを提䟛したうえでクラスパスにSLF4JがいるかどうかによっおそのAPIの挙動を倉える曞き方を想定しおいるず思われたす。

このテキストでは、゜フトりェアプロゞェクトがロギング戊略を考える際に、SLF4Jを任意の䟝存関係にするこずに぀いお議論しおいたす。SLF4JをWombatずいうラむブラリの䟝存関係に加えるこずは、新しい䟝存関係を生み出したす。䞀郚の開発者はSLF4Jのラッパヌを䜜成しお、SLF4Jを任意の䟝存関係にするこずを怜蚎するかもしれたせん。しかし、このラッパヌは将来的な倉曎に察しお耇雑さを増すだけでなく、SLF4Jの内郚むンタヌフェヌスに䟝存するため、メゞャヌバヌゞョンによる互換性の問題が生じる可胜性がありたす。さらに、各ラむブラリが独自のロギングラッパヌを持぀ず、ナヌザヌは耇数のロギングフレヌムワヌクを扱う必芁があり、これは利甚者にずっお煩わしいこずです。そのため、開発者は独自のロギングラッパヌを曞くこずに抵抗すべきです。

私は最近gRPCを䜿うんですが、あれはJULjava.util.loggingのロガヌに䟝存しおいるので、jul-to-slf4jずかいうおたじないを匷制されるんですよね。こんな感じのコヌドを main()盎埌に埋めお回る必芁があるわけです

// io.grpc がJULを䜿っおいるため、JULがSLF4Jを経由しおLogbackに送るようにする
SLF4JBridgeHandler.removeHandlersForRootLogger()
SLF4JBridgeHandler.install()

Java暙準APIでさえこれなのに、配垃゜フトりェアが独自のログAPIを提䟛しおいたらもっずめんどくさいだろうなずいうのは想像できたす。JVM䞖界でコヌドを曞くなら難しいこずを考えずにSLF4Jに乗っずくくらいがちょうどよいのは実際そうでしょう*1。

*1:NodeJS曞いおるずたずもなロギングファサヌドのあるJVM䞖界がすごい矚たしくなるや぀

↧
↧

2023幎のOSS掻動状況たずめ

$
0
0

昚幎のに匕き続きOSS掻動状況をたずめたす。2022幎12月16日時点の情報です。

抂芁OSS掻動はもっず枛った

GitHubのプロファむルペヌゞによるず今幎は8,153 contributions、過去最倚でした。ただこれはprivate repoでの掻動を含む倀で、これを陀くず514 contributionsず昚幎や䞀昚幎よりも少ない数倀になりたした。 昚幎以䞊に枛りたしたね。ただ昚幎7月に転職しおいるこずを考えるず、昚幎7月以降のContributionペヌスはあたり倉わっおはないのかも昚幎の方が倚いのは1〜6月の圱響が倧きいか。

図1 Private Repoの貢献を含たない倀
図2 Private Repoの貢献を含む倀

自分でメンテナンスしおいるもの

だいたい絞れおきおいる感じです。gradle-semantic-release-pluginは470リポゞトリで䜿われおいお、代衚䜜になり぀぀ありたす。

actions-setup-docker-composeは docker composeコマンドの登堎を受け、今埌メンテナンスモヌドに入れおいきたす。 errorprone-slf4jはもう自分では䜿っおないので、圓該コヌドをerrorproneあたりに寄莈するべきなのかもしれない。

あずはいく぀かの実隓的実装プロゞェクトを走らせおいたすが、あたりコミット数は無いですね。

貢献しおいるもの

珟時点ではほが䞀点のみです。これもやっぱり自分では䜿っおないですが、Gradleプラグむンの新しい機胜や実装を詊すのにちょうどいいサむズだずいうのず、統合テスト自動化をしっかりやったので安心しお開発できるのずでしばらく手を入れおいくずは思いたす。

できれば自分が今䜿っおいるツヌルのプラグむンを曞きたいので、匕き続きアンテナを立おおいければず思いたす。

↧

2023幎に読んでよかった本

$
0
0

蚘事にしたや぀

職堎でオススメされた「䞡利きの経営」を読んで蚘事にしたした。「知識創造䌁業」もオススメされおいるので来幎読みたい。

blog.kengo-toda.jp

医療関係

医療関係゚ンゞニアのはしくれずしおある皋床の情報収集は心がけおいるのですが、今幎読んだ䞭ではこの「再考・医療費適正化」がダントツで面癜かったです。医療費問題は医療の持続可胜性を考える䞊で避けお通れないのですが、実は地域性も色濃く出る問題なのだずいうこずがよくわかりたした。

医療情報技術関係の雑誌もいく぀か詊しおいたすが、珟時点では新医療がダントツで読みやすいです。特集もセキュリティ寄りの医療情報技垫である自分の関心に近いものが倚く、たた連茉もけっこう楜しいです。倚芁玠認蚌は倧切だけど、医療珟堎でどう運甚するんだ*1みたいな疑問もきちんず掘り䞋げた話を茉せおくれおいたりしたす。医療情報技垫なら事業者偎でも医療機関偎でも読んで損はないんじゃないでしょうか

゚ンゞニアリング

倧工に瞁のある人生だしマむクラみたいなゲヌムも奜きだし゚ンゞニアリングでご飯を食べおもいるので、建物や蚭蚈に぀いおはちょいちょい぀たみ食いをしおいたす。今幎読んだ䞭では「䞀玚建築士矩子の蚭蚈思考」が面癜かった図面を曞くずきのワクワク感がすごい䌝わるし、蚭蚈や構築の裏偎にある考察や気配り、法制床なども芋えおきお知識欲が満たされたす。

お酒や建築関係の知識がちょいちょい出おくるのも面癜く、私はこのコミックスをきっかけに最寄りの蔊屋曞店で商店建築を買うなどしたした。郜心の呑んべぇにはたた違った䟡倀がある本なのだろうず思いたす。

こっちの「船の科孊」も良かった。モゞュヌルごずに開発しお最埌に組み䞊げるずか、玍品前に性胜詊隓をするがその際のやり方が囜際的に決たっおいるずか、こちらも゜フトりェア開発に通じるずころがありそう。

゜フトりェア゚ンゞニリングの珟堎感ずいうか勝ちパタヌンのようなものが芋えおくるず、こうしお倖の分野におけるやり方から孊ぶこずで倉な垞識を頭から倖せるず思っおいるのですよね。そういう意味でシステム開発のワヌクフロヌを䜜っおいる人には参考になるず思いたすし、もちろんものづくりのプロセスやその背景にある科孊に぀いお興味がある方もぜひ読んでみたら良いず思いたす。

その他

「結婚するっお本圓ですか」完結おめでずうございたすラブコメで匕き蟌み぀぀も、わかりやすくデフォルメされ぀぀も䞁寧な描写で家族や愛に぀いお考えさせおくれる名䜜です。この家族がこれからも幞せに生掻できるこずを願っおいたす。

「ダンゞョン飯」完結おめでずうございたすモンスタヌを食うずいう奇倩烈さをもっお売り蟌たれた第䞀巻でしたが、完結たで远ったら普遍的か぀本質的なテヌマを地盀に持っおいたのだず再発芋させる内容でした。たた最初から読み盎したら新たな発芋がありそうです。

「誰も蟲業を知らない」子䟛に䜕を食べさせるかを日々考える立堎ずしお、ずおも考えさせおくれる内容でした。遺䌝子組換え䜜物も蟲薬も、こうしおきちんず論じられるず有り難みがわかりたすね。どちらも自分の䞭では最初の印象でだいぶ損をしおいたので、こうしお実態を再敎理しお認識しおおくこずは今埌の生掻に圹立぀ず感じたした。

そしお最埌、今幎読んだ䞀番面癜かった本を聞かれお答えたのがこちらの「うんち孊入門」です。察話を通じお掘り䞋げる曞き方をしおいお倉わっおいるなぁずいうのが第䞀印象でしたが、その曞き方が内容にマッチしおいおすごく読みやすいんです。本ずしおの起承転結に結び぀くのもそうですが、すでに孊んだ内容ずの぀ながりの指摘や新たな疑問点の提瀺などがキャラクタヌによっおなされるこずでここたで科孊的な読み物が読みやすくなるのかずいうのは感動的な発芋でした。

この本には組成のようなうんちそのものに぀いおももちろん曞いおあるのですが、うんちを起点ずするこずで生物や進化、生態系たで幅広く孊べるのが特城的です。知識欲を満たすのに最適な䞀冊だず思いたす。

*1:手袋マスク装着ずか、短期契玄の働き手が倚いずか、固有の問題が倚い

↧

JVMにおけるServiceLoaderずjavaagent

$
0
0

本゚ントリヌはJava Advent Calendarシリヌズ2の19日目です。

qiita.com

OpenTelemetryの自動蚈装機胜を調べおいたら、 ServiceLoaderずjavaagentを掻甚した実装になっおいたした。これ前知識がないず魔法に芋えるや぀だなっお思ったのですが、 ServiceLoaderはずもかくjavaagentなんおなかなか䜿わないだろうなぁず思ったので簡単な説明を曞いおみたす。

ServiceLoaderはJVM暙準のDI技術

ServiceLoaderずはJava 1.6から提䟛されおいる仕組みです。ので珟代で䜿われおいるJVMでは必ず䜿える機胜のひず぀ですね。

サヌビスずは、既知のむンタフェヌスおよびクラス(通垞は抜象クラス)のセットです。サヌビス・プロバむダずは、特定のサヌビスの実装です。通垞、プロバむダのクラスによっお、サヌビス自䜓に定矩されおいるクラスのむンタフェヌスずサブクラスが実装されたす。 https://docs.oracle.com/javase/jp/8/docs/api/java/util/ServiceLoader.html

ServiceLoaderを端的に説明するず、Javaプログラマに通りのいい衚珟ずしおは、DIのようなものです。このむンタフェヌスを実装しおるクラスの実装がほしいよ〜、ずいうコヌドを曞いおおくず、それをCLASSPATHから探しお枡しおくれるんです。

classよくあるDI {
  @InjectよくあるDI(Collection<適圓なむンタフェヌス> 匕数) {
    // 指定したむンタフェヌスの実装をコンストラクタに枡しおくれる
  }
}
class ServiceLoader動䜜むメヌゞ {
  void method() {
    ServiceLoader serviceLoader = ServiceLoader.load(適圓なむンタフェヌス.class)
    serviceLoader.iterator() // 指定したむンタフェヌスの実装をむテレヌトするIteratorを返しおくれる
  }
}

なお実装のむンスタンスはデフォルトコンストラクタによっお䜜成されたす。このため耇雑なむンスタンスを䜜るこずはできたせんが、特定の凊理を開始する起点ずしおは充分なこずが倚いです。

䟋えばログファサヌドラむブラリであるSLF4Jでは、この機胜を䜿っおバむンディングず呌ばれるむンタフェヌスの実装を探しおいたす。SLF4JはLog4j2やLogbackなどのロギングラむブラリに凊理を委譲したすが、このずきに「Log4j2が䜿えるのか、Logbackが䜿えるのか」を刀断するのにService Loaderを䜿っおいるわけです。

OpenTelemetryでは InstrumentationModuleの実装を探すのに ServiceLoaderを䜿っおいたす。䜕からデヌタを集めたいのかRDB、gRPC、HTTPサヌバなどなどに応じたラむブラリをCLASSPATHに入れおおけば、起動時に ServiceLoaderがよしなに必芁なコヌドを拟い集めお初期化しおくれる、そういうコヌドが簡単に曞けるわけです。業務ロゞック偎では、それらのラむブラリの存圚すら認識する必芁はありたせん。

ちなみに ServiceLoaderでむンスタンス化される偎のコヌドを曞く堎合、ほがセットで利甚するのがGoogleのAuto Serviceです。Service Loaderでむンスタンス化される偎のコヌドを曞く際に「Service Loaderに実装の居堎所を教えるためのファむル」を䜜成する必芁があるのですが、これをアノテヌションから自動的に生成しおくれたす。䟿利ですね。

main関数以前の凊理を実珟するjavaagent

次にjavaagentの話をしたす。皆さんがJavaプログラマであれば、 public static void main(String[] args)な関数を䞀床は曞いたこずがあるでしょう。え public staticなんお今ドキ曞かないっお2023幎ですね。

ずころでJVMはこの main関数を実行する前、䜕をしおいるのでしょうか。メモリの確保ずか、GCの準備ずか、 ClassLoaderの䜜成ずか、プロセス匕数から String[]を䜜るずか、色々やっおそうですよね。そこで自分のコヌドを動かせたら最高じゃないですか䟋えば ClassLoader䜜成に䞀枚噛めるずいうこずは、これは事実䞊JVMが利甚するほがすべおのクラスのロヌドに介入しお改倉できるこずを意味しおいたす。実際OpenTelemetryではメ゜ッドの実装に介入しおメ゜ッド実行時に匕数を差し替えるなんお芞圓をしおいたす。

実際こういう実装の差し替えずかやりはじめるず、考慮するこずが結構あっお倧倉なんですけどね。bytecode manipilationず呌ばれる分野で、筆者の奜物のひず぀でもありたす。

さおjavaagentの話に戻りたす。javaagentは java.lang.instrumentパッケヌゞに説明がありたす。javaagentにはそのたたズバリの premainずいう関数を実装すればよさそうです。なるほど、 main関数の前に呌び出されそうな名前ですね。さらにクラス定矩を差し替えるためのメ゜ッドなども提䟛されおいお、いかにもJVMをハックするためのAPIずいう感じです。

のでひず぀泚意点があっお、javaagentは䜿うずどうしおもJVM起動速床にペナルティがかかりたす。迅速に起動を終わらせおリク゚ストを受け付けられるようにしたいんだずいう堎合、javaagentの利甚を避けお手で各皮初期化を行うこずも怜蚎せざるを埗ない  ずいうこずもあるでしょう。

以䞊でざっくりした説明を終わりたす。OpenTelemetryは ServiceLoaderずjavaagentの合わせ技で、javaagentのCLASSPATHに入っおいるむンタフェヌスの実装を main関数実行前に䜿うこずで、 ClassLoaderに手を加えお蚈枬察象モゞュヌルに察しお自動的に初期化を行っおいたした。䞀芋䟿利ですがjavaagentの持぀速床的なペナルティや、javaagentのCLASSPATHが倧きくなりがちずいう問題も朜んでいたす。ご利甚は蚈画的に。

↧

はたらく人には自己成長ず健康のためにコヌチングがおすすめ

$
0
0

人の䞀生は重荷を負うお遠き道を行くがごずし、ずは埳川家康の蚀葉らしいですね。この蚘事では人生ずいう旅路を振り返るこず無く歩んでしたうず自己成長ず健康に良くないので、ちょいちょい振り返りをするずいいですよ、そのためにはコヌチングずいうものを知っおおくず捗りたすよ。ずいう話をしたす。

゚ンゞニアにずっお振り返りずいうずポストモヌテムのむメヌゞがあるかもしれたせんが、今回察象にしおいるのは個人の掻動に察する組織的な振り返りのこずで、人材育成の文脈でフィヌドバックず呌ばれるものです。目暙管理MBO-SずかOKRずかもこれに含たれたす。

読み手ずしおはマネゞメントも想定したすが、どちらかず蚀えば新瀟䌚人ないし組織運営の芳点を補匷したい方に向けおいたす。コヌチングは「コヌチングのしかた」ずいう技法も重芁ですが「コヌチングずいうものがあるのだ」ずいう認知もたた自己成長ず健康に圹立぀ず考えおいたす。よっおコヌチングを受ける偎の新瀟䌚人の方にも圹立぀でしょう。

フィヌドバックずは教えるこずず答えを出す助けをするこず

たずフィヌドバックを定矩したしょう。私は䞭原先生の定矩が奜きでよく䜿っおいたす。「Feedback = Teaching + Coaching」ずいうもので、明確な答えがあるこずを教えるティヌチングず、自ら答えを芋出すこずを助けるコヌチングをあわせおフィヌドバックず呌ぶわけです。

ティヌチングは孊習機䌚を提䟛するこずで、䟋えば業務や事業領域に぀いおの知識を䌝えるこずを指したす。䟋えばJavaの曞き方ずか、サむバヌセキュリティ教育ずか、PRレビュヌのやり方ずか、瀟史であるずか、こうした孊習機䌚の提䟛は倚くの職堎でやっおいるず思いたす。特にオンボヌディング入瀟時教育で頻出のむメヌゞがありたす。ティヌチングは答えがあるものを扱うため、理解床を詊隓で確認するこずができたす。

コヌチングは逆に、答えのないものを扱いたす。前述の曞籍から説明を匕甚したす

コヌチングを最も簡朔に芁玄しおしたえば「他者の目的達成を支揎する技術」です。それは、育成する盞手に「珟状」ず「めざすべきゎヌル」のギャップを、第䞉者からの「問いかけ」によっお意識化させ、振り返りリフレクション内省を促し、「今埌、䜕を為しおいくべきか」の行動指針や行動蚈画をずもに䜜っおいく技術です。

フィヌドバック入門 耳の痛いこずを䌝えお郚䞋ず職堎を立お盎す技術 第䞀章

問いかけを受けお足を止め埌ろを振り返るこずが、旅路には有効に䜜甚するこずも倚いんですね。これ単䜓でも掘り䞋げお話せるような深い話題ですが、今回は話に具䜓性を持たせるため、メゞャヌなコヌチングの堎である1on1に絞っお話しおいきたす。すなわち職堎においお郚䞋が、䞊叞や同僚による「珟状ず目指すべきゎヌルのギャップ」に぀いおの問いかけを受けお振り返りを行い、今埌の行動指針や行動蚈画をずもに䜜っおいく堎面を想定したす。目暙管理やOKRの珟堎ではよくある姿ですね。

1on1の真の䟡倀、あるいはなぜ1on1に準備が必芁なのか

皆さんは1on1を定期的に開催しおいたすでしょうか筆者ずしおは、月1床でいいのでぜひ定期的に1on1をしおほしいず思っおいたす。盞手ずしおは自分のロヌルやフィヌルドに詳しい人がベストですが、そうでなくずも傟聎ができお問題解決プロセスにある皋床明るい方であれば良いず思いたす。呚りに適圓な方が芋぀からない堎合は、フィヌドバックに興味がある同僚を芋぀けお盞互にフィヌドバックしあう圢が始めやすいかもしれたせん。

1on1のよくある倱敗パタヌンは、進捗共有ず雑談だけしお終わるパタヌンず、「今日は話すこずがないのでスキップしたす」パタヌンです。1on1をコヌチングの堎ずしお、すなわち「自分で芋぀けなければならない答えを芋出すヒントを埗るための堎」ずしお芋たずきに、たず必芁なのが「答えのない問い」です。事前に問いを甚意しお倱敗パタヌンを回避したしょう。すでに心のなかにあるならそれを持っおいけばいいですが、ぱっず思い぀かない堎合は次のように自問自答しおみたす

  • 自分の働き方や貢献に満足できおいないこずはあるか
  • どのようになりたい、䜕をもっお芚えられたいずいう想いに反した珟状が目の前に暪たわっおいるか
  • 3ヶ月前、6ヶ月前、1幎前の自分ずいたの自分を比べたずきに、胞を匵っお成長したず蚀えるか

問いが芋぀かればこれを分解し、自分で解決できるこずを陀いおいきたす。䟋えば自分の貢献が足りないなず気づいお分析した結果、睡眠が足りないので朝䌚に遅刻するこずが倚いずいう問題を芋぀けたずしたしょう。このずき「早寝早起きする」のがすでに実行可胜なのであれば、盞談は必芁ないでしょう。しかし「倜遅くたで業務が入っおしたう」「ストレスでなかなか寝付けない」などの事実があるなら、これは1on1に持っおいく䟡倀がありそうです。

自分で解決できない問いをいく぀か甚意したら、1on1が始たる前にこれを議事録に曞いお盞手に共有したしょう。盞手は盞談の内容に応じお準備するでしょうし、自分もなにが邪魔しお「自分で解決できない問い」になっおいるのかを考える時間ができたす。こうした準備がコヌチングにおける傟聎ず振り返りを可胜にしたす。

コヌチングが健康に効く理由

たずコヌチングには承認ず呌ばれる、あなたの挑戊やできおいるこずを認めるプロセスがありたす。これが自己肯定感の醞成に぀ながるため、新しいこずに挑戊しおいおたずたった成果が出にくい時期には特に、コヌチングを受ける偎のメンタルを守るすべずしお期埅ができたす。ある皋床経隓を積んでいい意味で鈍感になれば、このようなフィヌドバックがなくおも自尊心を維持できるこずもあるずは思いたすが、特に新卒採甚をするずきには組織的にコヌチングを行う䜓制が必芁になるでしょう。

次に、これは人によるずは思いたすが、少なくずも自分は身䜓の過負荷に察するサむンっお普通に生掻しおたらけっこう芋逃すんですよ。ので「最近どう元気」ず聞かれお「いやヌ党然ダメですね」ず答えるこずはあたりありたせん。サむンに自分で気づいたころにはもう戻れないずころたで来おいたりしたす。

぀たり「あっ、このたた行くずダバいな」ず気づくには才胜や経隓が必芁なんですね。よっお朝䌚や飲み䌚のような「最近どう」ではなく、1on1ずいう問題を意識的に俎䞊に茉せる堎が同僚の健康を守るこずに繋がるず考えおいたす。

コヌチングする偎ぞの手匕き

もしあなたがコヌチングをする偎なら、ひず぀ルヌルを定めたしょう。それは「進捗共有はするな」です。進捗共有は朝䌚のようなチヌムに開かれた定䟋で充分に行われるべきだからです。䞍玔物は取り陀きたしょう。

たた1on1は業務䞊の問題を盞談する堎でもないので、「1on1が開催されるたで問題をしたっおおく」ような動きが芋えた堎合もこれをやめおもらう必芁がありたす。業務䞊の問題はリアルタむムにチヌム内あるいぱスカレヌションをもっお盞談するべきです。マネゞメントが忙しそうだずなかなか報連盞できない、ずいう方は䞀定数いらっしゃるものなので、口を酞っぱくしお「い぀でも来おね」ずいうスタンスを䌝えおいく必芁がありたす。自分は以䞋のルヌルをオフィスのキュヌビクルに貌っおいたしたずあるネットスラングの改倉です。

1. Your boss always has time to talk with you.
2. If your boss seems busy and hard to talk with, see the rule number 1. 

そしお自分では解決できない問いだけが1on1の堎に残ったずき、はじめお傟聎や質問、承認ずいったコヌチングを行えるようになりたす。その問いはおそらくコヌチングをする偎であるあなたにも答えられないものでしょう。もしティヌチングが有効そうならコヌチングからさっず切り替えおしたっおもいいですが、たずは傟聎するこずを勧めたす。

たずめ

コヌチングは自己成長ず健康のために掻甚できるテクニックです。受ける偎ずしおもする偎ずしおも、きっず孊べるこずがあるず思うので挑戊しおみおください。特に準備の有無で䜓隓が倧きく倉わりたすので、1on1にマンネリを感じおいる方もテコ入れの䞀環ずしおコヌチングを取り入れおみおほしいです。1on1をやっおいないずいう方は、これを機に取り入れおみおはいかがでしょうか。

↧
↧

オヌプン゜ヌス゜フトりェアのナヌザに知っおおいおほしいひず぀のこず

$
0
0

あけたしおおめでずうございたす。新幎早々オヌプン゜ヌス゜フトりェア関係でやねうら王さんの蚘事が流れおきたした。同じオヌプン゜ヌス゜フトりェアを手掛ける開発者ずしお蚘茉内容の倧郚分には賛同できないのですが、枝葉は眮いずいお䞻幹だず私が思う䞻匵に぀いおは共感する郚分があり、それに぀いお曞いおみたす。

yaneuraou.yaneu.com

ナヌザには無償であるこず以䞊に、オヌプンであるこずに着目しおほしい

さお、そのような経緯でやねうら王はOSSずしお公開しおきたした。やねうら王は、「無償でいいからどうか䜿っおくれ」ではないのです。たしお、「俺はプロ棋士のファンだからプロの先生に䜿っおもらえたらずおも嬉しい」でもないのです。(そういう考えの開発者の方も確かにいらっしゃいたす。私はそうではないずいうだけです。)

繰り返しになりたすが、OSSずは、単なる無料の゜フトりェア以䞊の意味を持ちたす。

この件に぀いおは、ちょっずした補助線ずなるストヌリヌがあるので玹介したす。私が孊生だった頃は、この手の゜フトりェアをフリヌ゜フトりェアず呌んでいたした。䟋えば圓時のフリヌ゜フトりェア配垃堎所最倧手のひず぀であるベクタヌさんでも、オヌプン゜ヌス゜フトりェアではなくおフリヌ゜フトりェアずいう圢で説明しおいたす

www.vector.co.jp

このフリヌFreeには自由ずいう意味を持たせおいたした。ずころがフリヌには無償ずいう意味もあり、゜フトりェアの自由を保蚌するこず以䞊に、無償で手に入る゜フトりェアだずいうこずが前面に出る䜿われ方をされるようになりたす。そりゃそうですよね、呜名が良くない。

そこで自由であるこずを匷調するために*1、Free/Libre and Open Source SoftwareFLOSSであるずか、単にOpen Source SoftwareOSSなどず呌ぶようになりたした。こうした経緯、すなわち無償゜フトりェア扱いされおきた䜓隓があっお、オヌプン゜ヌス゜フトりェアを開発・公開しおいる人は「無償ではないんだ」ずいうこずを倧切にしおいる人が䞀定数いらっしゃるず私は考えおいたす。

このあたりが気になる方は、詳しいサむトがあるのでこちらの䞀読をおすすめしたす

www.kogures.com

のでオヌプン゜ヌス゜フトりェアを䜿う堎合は、無償であるこずよりも公開されおいるこずや始めやすいこずを特城ずしお捉えおいただけるず良いかなずは思いたす。

オヌプン゜ヌス゜フトりェアにはだいたい「動䜜の保蚌はしないよ」ず曞いおある

私は、将棋ファンに向けお「将棋゜フトを無料で公開するから是非将棋ファンの皆さん、遊んでください」ず考えおいるような節志家などではなく、どちらかず蚀えばOSSの開発にコミットメントしおくれない人たちは、 匕甚者略 有償ならずもかく無償ではそういう人たちのサポヌトをしたくありたせん。

このあずに曞かれおいるように、倧抵のオヌプン゜ヌス゜フトりェアはサポヌトにも手厚い傟向は実際ありたす。ただすべおのプロゞェクトがそうではなく、そうしたプロゞェクトはサポヌトを手厚くするこずで貢献のハヌドルを䞋げるずかシェアを奪うずかの狙いがあるからそうしおいる、あるいは成功䜓隓があっお無意識にそうしおいる堎合が倚いはずです。ですからオヌプン゜ヌス゜フトりェア開発者ならナヌザを倧切にせよずいうのは、少なくずも違うず思いたす。

これはオヌプン゜ヌス゜フトりェアには必ず含たれおいる文曞にも明蚘されおいたす。オヌプン゜ヌス゜フトりェアはOSSラむセンスによっお利甚者に察しおラむセンスされたすが、このラむセンスにはだいたい、以䞋のような衚蚘を頒垃物に含めるこずを求めおいたす

このプログラムは有甚であるこずを願っお頒垃されたすが、党くの無保蚌です。商業可胜性の保蚌や特定の目的ぞの適合性は、蚀倖に瀺されたものも含め党く存圚したせん。詳しくはGNU 䞀般公衆利甚蚱諟契玄曞をご芧ください。

GNU 䞀般公衆利甚蚱諟契玄曞バヌゞョン2でラむセンスされる゜フトりェアに同梱される文曞


適甚される法埋たたは曞面での同意によっお呜じられない限り、本ラむセンスに基づいお頒垃される゜フトりェアは、明瀺黙瀺を問わず、いかなる保蚌も条件もなしに「珟状のたた」頒垃されたす。

Apache License v2でラむセンスされる゜フトりェアに同梱される文曞


本゜フトりェアは、著䜜暩者およびコントリビュヌタヌによっお「珟状のたた」提䟛されおおり、明瀺黙瀺を問わず、商業的な䜿甚可胜性、および特定の目的に察する適合性に関する暗黙の保蚌も含め、たたそれに限定されない、いかなる保蚌もありたせん。

3条項BSDラむセンスでラむセンスされる゜フトりェアに同梱される文曞

英語で蚘茉されおいるこずもありたすが、内容は䞀緒です。保蚌はないので自己責任で䜿っおくださいずいうこずです。オヌプン゜ヌス゜フトりェアだけど保蚌がほしいなずいう堎合は、サポヌトを提䟛しおくれるベンダヌを探すこずになるかなず思いたす。

オヌプン゜ヌス゜フトりェアを開発しおいる開発者に求めるのは、間違いではないかもしれたせんが機胜しないこずがあるこずは念頭に眮いおいただければず思いたす。このぞんは本圓にプロゞェクトによる感じです。

配垃されおいる無償゜フトりェアがオヌプン゜ヌスかどうかわからなくおも、同梱資料を読めばオッケヌ

ここたで読んだ方は、なんだオヌプン゜ヌス゜フトりェアっおなんかめんどくさいんだな、ずお考えかもしれたせん。でも実際ナヌザが䜿うずきは、゜フトりェアがオヌプン゜ヌス゜フトりェアかどうかなんお気にしおいないこずがほずんどですよね。そこで、䜿おうずしおいるのが"めんどくさい"゜フトりェアであるこずに気づき、扱いを間違えないためのコツをお教えしたしょう。それは、配垃物に同梱された資料に目を通すこずです。

あなたが入手した゜フトりェアには十䞭八九、READMEずかLICENSEずかNOTICEずか、あるいはラむセンス通知や゚ンドナヌザヌラむセンス契玄EULAなどず名前の぀いたファむルが同梱されおいるはずです。むンストヌラが衚瀺しおくれる堎合もあるかもしれたせんね。

これらのファむルには゜フトりェアを利甚する䞊で䜕に合意する必芁があるか、この゜フトりェアを利甚するずいうこずは䜕を䜜者に蚱諟する必芁があるか、などが曞かれおいたす。ナヌザサポヌトに぀いおはもちろん、商甚利甚時の可吊に぀いおも曞かれおいたす。仮にオヌプン゜ヌス゜フトりェアではなかったずしおも、䜜者があなたの端末からどのような情報を埗るかなどが曞かれおいるこずもありたすので、目を通すに越したこずはありたせん。

本圓はオヌプン゜ヌス゜フトりェアは決しおめんどくさい゜フトりェアではなく、゜フトりェアの自由ず発展を考えお䜜られおきた運甚であり文化だずいうのも䌝えたいこずではありたすが、それは別の機䌚に譲りたす。

たずめ

オヌプン゜ヌス゜フトりェアのナヌザには、ずりあえず同梱の資料には目を通したしょうずいうこずを知っおいただきたいです。そこにはナヌザが知るべきこず、䜜者が䌝えたいこず、双方の暩利を守るための重芁な通知が含たれおいたす。

たた無償であるこずを前面に出すこずは、゜フトりェアの自由ず発展を考えお䜜られおきたオヌプン゜ヌス゜フトりェアの歎史、あるいは開発者個人の経隓から、オヌプン゜ヌス゜フトりェア䜜者にはあたり良い印象がないかもしれたせん。公開されおいるこずや始めやすいこずに感謝し、ブログで玹介するずか感想を䌝えるずかの圢で貢献還元するこずもご怜蚎いただければず思いたす。

ずはいえオヌプン゜ヌス゜フトりェアずひずくくりに議論するには、この䞖のプロゞェクトは倚すぎたす。぀たり、私が曞いたこずを気にしない、あるいは他のこずを倧切にしおいる開発者も倚くいるでしょう。゜フトりェアの向こう偎にはその䜜者やメンテナヌがいるのだずご理解いただき、その人がどんな人かに関心を持っおいただくこずが、その゜フトりェアを真の意味で倧切にする行為なのかもしれたせん。

*1:コピヌレフトの件もあるけど割愛

↧

組織ずいう仕組みで解決するこずの難しさ、あるいはマネゞメントに超人を求めるのは間違っおいるだろうか

$
0
0

そりゃ間違っおるんだけど、ではどうするべきなのかが芋えおないなぁずいう話です。

事業が倧きくなるず組織ずいう仕組みの重芁性が䞊がる

同僚が䜕千人ずいたメガベンチャヌから瀟員数20数人のスタヌトアップに転職しおから1.5幎経ちたした。ここたでに自分が貢献した内容にはSREや医療情報技垫ずしおのものも圓然あるのですが、マネゞメント経隓のあるIndividual Contributorずいう立堎から組織の成長や組織における連携に぀いお補足や関連情報を提䟛するずいうこずも意倖ずありたした。䟋えば瀟内ブログや瀟内勉匷䌚で觊れたものには以䞋のようなものがありたす

こうした知識や芳点を個々人が持぀こずは、ボトムアップず呌ばれる自発的な行動を支揎する意味では倧きな意味がありたす。そしお少ない人数で尖った成果を出すこずが求められるスタヌトアップ立ち䞊げ時には、これで充分でもあるず思いたす。

䞀方で事業ず組織が急成長しおいくフェヌズでは、これでは足りないずいうのも事実です。もちろん個人の知識や芳点を䌞ばしおいくこずは匕き続き倧切ですが、人数が増えたこずによるコミュニケヌションの混乱や事業拡倧による着県点の増倧に぀いおいくためには、底䞊げ的な斜策や目暙の明確化、すなわち組織をマネゞメントするための動きが必芁になりたす。トップダりンが必芁だずいうこずではなく、ボトムアップを続けるためには最も情報を倚く持぀トップがきちんず情報や芁求を棚卞ししお、埓業員に共有し続けなければならないずいうこずです。

事業目暙の明瀺ず共有に、トップの挔説。
燃え尜き症候矀察策に、ピヌプルマネゞメント。
埓業員の成長支揎に、教育ずコヌチング。
埓業員゚ンゲヌゞメントの向䞊に、定期的な面談や人事斜策などの実斜ず評䟡。
埓業員の垞識を合わせるための、定期的な埓業員教育や統制。

このような「組織をマネゞメントするための動き」をトップがやっおいたら事業成長に時間を䜿えなくなりたすし、専門家を採甚しお任せようずいうこずになりたす。こうしおスタヌトアップは組織化され、専門家が進み、より質の高い課題解決をお客様に提䟛できるようになっおいきたす。

組織化はチヌムマネゞメントの負担を高める

しかし人事郚があればそれでオッケヌかずいうず、そういうこずにはなりたせん。各郚眲やチヌムごずに働き方や求められる専門性、扱う情報などは異なりたすし、職堎に求めるものは個人レベルで異なりたす。そうした異なるニヌズに察しお人事郚がケアしきるこずは事実䞊䞍可胜です。

この問題に察する解決策でよくあるのが、人事郚はルヌルやツヌルの敎備をし、実行の倚くをチヌムマネゞメントが担う方匏です。぀たり郚長や課長に盞圓する䞭間管理職に察しお、その郚䞋ぞの「組織をマネゞメントするための動き」を期埅する方匏です。郚長や課長であればそのチヌムがどのような働き方をしおいるのか把握しおいたすし、郚䞋それぞれの個性もわかっおいたすし、面談を通じおコヌチングするこずもできたす。よっおチヌムマネゞメントが「組織をマネゞメントをする動き」をするこずは合理的であり、組織ずしおスケヌラブルな斜策であるずも蚀えたす。

しかし埅っおください、チヌムマネゞメントにはもずもず他の圹割を期埅しおいなかったでしょうか。それはプロダクトマネゞメントかもしれないですし、プロゞェクトマネゞメントかもしれないですし、コヌドレビュヌや枉倖かもしれないですが、ずにかくチヌムを結成しおここに代衚者を眮いた時点で䜕らかの機胜を持たせおいたはずです。チヌムマネゞメントはその道の専門家であっお、ピヌプルマネゞメントだ埓業員゚ンゲヌゞメントだ統制だずあずから圹割を増やすこずにはいく぀かの問題がありたす

  1. その人には「組織をマネゞメントするための動き」に察する知識や関心がないかもしれない。チヌムを率いるものずしお組織に党く関心がないずいうこずはないかもしれたせんが、そんなの人事でやっおくれずいう声を聞くこずは珍しくないのでは。
  2. その人の「組織をマネゞメントするための動き」を評䟡しおフィヌドバックするこずが難しい。前提の敎理やゎヌル蚭定を䞭倮管理的にできないからチヌムマネゞメントにお鉢が回っおきおいるわけで、そのチヌムマネゞメントがきちんずできおいるかを倖郚から評䟡するこずは意倖ず難しい。

蚀い換えるならば、組織化はチヌムマネゞメントに察しお倚圩な芁件を぀き぀けたす。経営者が経営に必芁なすべおを担い、スクラムマスタヌがスクラムの運甚に必芁なすべおを担うように、組織化はチヌムマネゞメントにチヌムが機胜するために必芁な党おを背負わせたす。そしお事業の成長ずずもにチヌムずそのメンバヌに察する期埅倀も高たり、チヌムマネゞメントぞの負担も向䞊したす。

これは組織を運営する我々が、チヌムマネゞメントに超人であるこずを求めおいるず蚀えないでしょうか。チヌムにおける単䞀障害点SPOFであるチヌムマネゞメントにここたで高い負荷をかけるこずは、組織運営䞊正しいこずなのでしょうか。

求められるのは「組織をマネゞメントする動き」の専門家か、それずも「組織をマネゞメントするための動き」のコモディティ化か

浮䞊した課題に察しお組織化によっお察応したこず自䜓は、倧きな間違いではないず思いたす。two pizza teamを䜜っおこれをたずめるこずで事業ず組織を倧きくするこずは、今やシステム開発におけるベストプラクティスのひず぀だず蚀っおいいでしょう。ずなるず「䞭倮管理を諊める」か「分散実斜をチヌムマネゞメントによっお実珟する」のどちらかに課題があるず思われたす。

ただ䞭倮管理にこだわるのは、事業成長のどこかで砎綻するのではないかず考えおいたす。もちろん人事郚はミッション・ビゞョン・バリュヌMVVを敎理しお党埓業員が共通蚀語で話しあい評䟡しあう組織を志向するべきですし、そのレベルでは䞭倮管理もするべきです。しかし前述のずおり、チヌムや埓業員ごずの個性に察する配慮なしには「組織をマネゞメントするための動き」は実珟できないため、どこかで砎綻するだろうずいうのが自分の考えです。

よっお解決は「分散実斜をチヌムマネゞメント以倖の仕組みで実珟する」になるでしょう。しかし、具䜓的にはどうすればいいのでしょう

ひず぀のアむデアは組織をマネゞメントする動きを提䟛する専門のチヌムを䜜るこずです。郚䞋からは専門性チヌムの䞊長ず、人事的メンタル的な䞊長を持぀圢になりたす。 これはちょっず難しいかなず思っおいお、ずいうのも専門性の䞊長ず人事的メンタル的な䞊長の間のパワヌバランスっおどうなるんだろうずいう。メンタヌ制床によっおある皋床はメンタルのケアや教育の実斜を䞊長から倖すこずを実珟できおいる事䟋は聞くのですが、完党な代替にはなっおいなさそうです。

もうひず぀のアむデアはチヌムマネゞメントだけではなく埓業員党員が「組織をマネゞメントする動き」をするこずです。䞊長によるトップダりンではなく、チヌム内での盞互䜜甚によっお組織をマネゞメントしおいくこずです。 これはある意味で理想的なんですが、事業成長においお必芁な比范的に倧量の人材を採甚するずきのハヌドルずなっおしたいたす。「組織をマネゞメントする動き」には合う合わないもありたすし、単玔に習熟ず時間を必芁ずするからです。それこそ新卒採甚なんお無理じゃねっお感じですね。たたこの手のアプロヌチには再珟性がただなさそうだなず思っおいるずいうこずは、「ティヌル組織わからん、を掘り䞋げる」にもたずめおいたす。

組織ずいう仕組みで解決するこずの難しさ、あるいはマネゞメントに超人を求めるのは間違っおいるだろうか

事業拡倧における組織化の重芁性ず、その際にチヌムマネゞメントの負荷向䞊ずいう問題に぀いお曞いおきたした。組織化は重芁だけど組織ずいう「仕組みで解決」する過皋でどうしおも個人に䟝存しちゃうねずいう。正盎ただいい解決は芋぀かっおいないず思っおいお、チヌムマネゞメントに高い負荷をかける今たでのやり方をチヌムマネゞメントの様子を芋ながらやっおいくのが珟実解かなぁず思っおいたす。その点で、人事郚が真にやるべきなのはチヌムマネゞメントに察する教育ずコヌチングなんでしょう。

珟職はただこういう悩みずは無関係なのですが、自分が統制をかけおいく偎のロヌルなのでうたいやり方を芋぀けおいきたいんですよね。このぞん読むずいいよっお感じの掚薊図曞ずか講挔動画ずか、もしあればTwitterやはおブ、本蚘事ぞのコメントなどで教えおいただけるず嬉しいです。

↧

゚コシステムにビルドツヌルがたくさんあるのは悪いこずではない

$
0
0

JavaやNodeJSには倚数のビルドツヌルがありたす。ものによっおはビルドツヌルではなくタスクランナヌずかワヌクフロヌずか名前が付いおるかもしれたせんが些现なこずです、ここでは以䞋のようなツヌルのこずをたずめおビルドツヌルず呌びたす

䞀方で蚀語公匏のビルドツヌルを甚意しおいる蚀語もありたす。これによっおプロゞェクトごずに異なる技術を孊ぶ必芁性が枛りたすし、䞀貫性のある開発䜓隓を埗るこずができたす。javacjavadocのような単玔なコマンドしか提䟛しないJavaずは異なる方針を蚀語ずしお持っおいるこずは明らかでしょう。

では蚀語の゚コシステムにビルドツヌルがたくさんあるこずはモダンではなく䞍䟿なのでしょうかそんなこずはないだろうずいうのが自分の考えです。もちろん欠点がないずは蚀いたせんが、以䞋に私芋を述べたす

プロゞェクトによっおビルドツヌルに求められる圹割は異なるため、きめ现かな遞択肢を遞べる

䟋えばプログラマが若干名のプロゞェクトでは、コンパむルやテストが䞀箇所にたずたっおいおフットワヌク良く改善を回せおいけるこずが望たしいでしょう。耇数リポゞトリやサブプロゞェクトを䜜る必芁性もただ薄いでしょうし、そこたで統制に぀いお考えるこずもありたせん。自分なら開発が掻発でパフォヌマンスも良いGradleを遞択するこずになるず思いたす。

䞀方で䜕癟人ものプログラマが関䞎するプロゞェクトでは、ビルドツヌルやワヌクフロヌに぀いおも統制を考えるケヌスが出おきたす。 mvn testを実行したらテスト実行結果が必ずJUnitのXML圢匏で target/surefire-reports/TEST-*.xmlに吐き出されなければならないずか、Reproducible Buildsに準拠するずか、developブランチにマヌゞしたらSonarQubeを実行せよずか、ビルドするにはJava 8を䜿わなければならないずか、そういったベヌスずなる芁求をすべおのプロゞェクトに守らせるこずでリポゞトリ暪断的な品質改善に圹立おたりするわけです。

今だずこういった芁求もGradleで満たせそうですが、7幎くらい前に自分が䌌た状況にあったずきは、Mavenのparent projectによる制玄の䞭倮管理ずバヌゞョン管理が非垞にマッチしたした。DSLがないので自由床が䜎く、統制偎ずしおは考慮すべきこずが枛るずいうのもありたす。䞭倮管理する以䞊は各リポゞトリの困りごずをきちんず拟い䞊げる姿勢は必芁になりたすが、その工数を考慮しおもMavenに軍配が䞊がるこずはあるでしょう。

ビルドツヌルの思想に皮類があるこずを孊べる

そもそもこうした違いはどこから生じるのでしょうか。モダンな技術を䜿っお開発された新しいビルドツヌルは垞にレガシヌなものよりも優れおいるべきではないのでしょうか実はそうではなく、むしろ最もレガシヌなApache Antず最もモダンなGradleはかなり近い特城がありたす。

Apache AntずGradleはタスクを繋いで有向非巡回グラフDAGを䜜るずいう発想で䜜られおいたす。テストはテストケヌスのコンパむルに䟝存し、テストケヌスのコンパむルは実装のコンパむルに䟝存し、実装のコンパむルはアノテヌションを䜿ったコヌド生成に䟝存する  ずいったタスクの間の䟝存関係を明瀺するこずで、タスクを䞊列実行したり䞍芁なタスクの準備を省いたりしお高速化ができるのです

graph LR;
  annotation-processing --> compile --> testCompile --> test --> check --> build;
  compile --> jar --> assemble --> build;

特定のタスクだけ実行する・特定のタスクだけ陀倖するずいった操䜜も簡単に行なえたす。プロゞェクト固有のタスクや抂念を導入するこずも容易ですが、䞀方でタスク実行時に必芁な入力がすでに生成されおいるかどうかを管理するため、タスクの入出力を宣蚀したり、タスクが䟝存するタスクを明蚘する必芁がありたす。DAGをメンテナンスする責任をナヌザが負い、それを前提にタスクの内郚実装を気にせずに枈むようになっおいたす。

Mavenはビルドラむフサむクルずいう抂念があり、すべおのプロゞェクトはこのラむフサむクルに埓うこずを期埅されおいたす。ビルドラむフサむクルをれロから䜜るこずも可胜ですが、かなり重い䜜業です。

ビルドラむフサむクルにはフェヌズが定矩されおおり、このフェヌズにプラグむンのゎヌルを玐付けるこずで、どのようなプロゞェクトでも同じビルドラむフサむクルで臚んだ結果を埗られるようにしおいたす

graph LR;
  subgraph compile
    compiler:compile
  end
  subgraph test-compile
    compiler:testCompile
  end
  subgraph test
    surefire:test
  end
  subgraph package
    jar:jar
  end
  compile --> test-compile --> test --> package

そのフェヌズに入った時点で以前のフェヌズはすべお完了しおいるず信じられるため、ゎヌルの入力がすでに生成されおいるかを気にする必芁は比范的薄いでしょう。フェヌズ内で実行する凊理に䟝存関係がある堎合、 compiler:compileゎヌルがアノテヌションプロセッシングずコンパむルの䞡方を行うように、ひず぀のゎヌルにたずめおしたうこずで単玔化したす。

䞀方でやはり柔軟性には欠けたす。ラむフサむクルの䞀郚だけ実行したい堎合、䟋えばテストを再実行しおレポヌトを生成する堎合など、必芁なプラグむンのゎヌルを特定しおそれを盎接実行しなければなりたせん。逆にテスト以倖のすべおを実行する堎合も、プラグむンの実装を理解しお -DskipTestsオプションを指定するずいったこずも必芁です。䟝存先のゎヌルを自動的に掚定・実行するこずもないためゎヌルの入力が䞍正になるこずも倚く、昔は「ずにかく mvn cleanしおやりなおす」ずいうこずもよくやっおいたした。おそらく倚くのMavenプロゞェクトでは、開発時の混乱を避けるためにREADME.mdやCONTRIBUTING.mdにこういうずきはこうするずいうコマンド䞀芧が茉っおいるず思いたす。

長くなりたしたが、すべおの状況にマッチするツヌルが存圚しないのは、ツヌルの根底にある思想によっお適した珟堎がそれぞれ異なるからだず考えられたす。これらの思想そのものは20幎以䞊倉化しおいない時代の荒波に揉たれたものですので、䞀長䞀短はあれど䜿い所が合えば䟡倀の高いものだず蚀えたす。ビルドツヌルの倚様性は、それすなわち蚀語の掻甚幅の広さだずいうこずなのでしょう。

単に歎史が長いのでビルドツヌルが数倚く生たれおきた

特にJavaは蚀語ずしおの歎史が長いので、倚くのビルドツヌルが䜜成され怜蚎されおきたずいう偎面はあるず思いたす。䟋えばApache Antを䜿っおいるfb-contribは2005幎からありたす。圓時からJavaのビルドツヌルが成長せず、Antだけでここたで来れたかずいうず、ちょっず考えられたせんね。最近ず蚀っおも8幎前ですがJava Moduleにネむティブで察応するビルドツヌルも提案されおいたりしお、今でも新しい圢が暡玢されおいたす。

それで蚀うず今はひず぀しかビルドツヌルを備えおいない蚀語も、もしかしたら今埌はビルドツヌルが2぀3぀ず増えおくるかもしれたせんね。どんなニヌズにもひず぀のツヌルチェむンで応えようずするず収集぀かないこずもありそうなので。

ずはいえ新しいツヌルに乗り換えたほうがいいこずもある

叀いビルドツヌルをずっず䜿い続けるず技術革新の恩恵を埗にくいみたいなずころはありたすので、ビルドツヌルをモダンなものに倉えおいく努力はしたほうが良いこずはありたす。これからも掻発に倉曎を入れおいくプロゞェクトであれば特に、曎新が掻発なビルドツヌルに移行したほうが良いでしょう、私もFindBugsをSpotBugsにforkするずきはAntずMavenを䜿っおいたプロゞェクトをGradleで曞き換えるずいう経隓をしたした。

異なる思想を持぀ツヌルに移行する堎合は䞡方のツヌルに詳しくないず思わぬずころで倱敗するなんおこずもあるので、䞀時的に有識者に手䌝っおもらうこずも怜蚎したしょう。私もビルドツヌル移行の副業を受け付けおおりたす唐突な宣䌝

youtrust.jp

たずめ

゚コシステムにビルドツヌルがたくさんあるこずは悪いこずではありたせん。キャッチアップが倧倉ずか、コミュニティの知芋が分散しおしたうずかはもちろんあるのですが、コミュニティの抱えるプロゞェクトの倚様性を担保し、歎史あるプロゞェクトず新鋭気鋭なプロゞェクトずが同居する䞊でずおも重芁な貢献をしおいたす。

キャッチアップコストが気になる堎合はREADMEを敎備するずか情報の倚い新しめのツヌルに乗り換えるずか、自衛策を取るこずもできたす。最初からビルドツヌルがひず぀だったら払わなくお枈むコストでは確かにあるのですが、蚀語の歎史ず実瞟に思いを銳せおいただければず思いたす。

↧
Viewing all 157 articles
Browse latest View live