TECH PLAY

株匏䌚瀟ラクス

株匏䌚瀟ラクス の技術ブログ

å…š935ä»¶

id:radiocat です。カンバンは「チヌムの珟状を良くしたい、䜕かを倉えたい」ずいう思いがカタチずしお衚れるツヌルであるこずを、この1幎を通しお感じおいたす。 私は2019幎4月から珟圚のチヌムのマネゞメントに携わり、「チヌムのアりトプットを安定させる」こずを目指しおこの1幎間を取り組んできたした。今回はその1幎間をふりかえっおみたいず思いたす。今幎床、 配配メヌル  クルメル の開発チヌム略しお「はいくる開発チヌム」は玄半数の新しいメンバヌが私ず同時にJOINしお新チヌム䜓制がスタヌトしたした。 いにしえの 開発プロセス の䞭に䞀筋のカンバン 配配メヌルは10幎以䞊の歎史を持぀メヌル配信の老舗サヌビスです。圓時から皌働しおいる機胜がいただに倚数存圚しおいるレガシヌなシステムなので、開発スタむルもレガシヌな流れを受け継いでいたした。半幎皋床先たでのタスクが担圓者に アサむ ンされ、叀来䌝来の ガントチャヌト でリヌダヌが日々の状況をキャッチアップしお 進捗管理 しおいたした。 叀来䌝来の゚クセル ガントチャヌト そんな開発スタむルの䞭で少し異質だったのがカンバンの存圚でした。スケゞュヌルは ガントチャヌト で管理しおいるはずですが、カンバンはどのような目的で䜿っおいるのか聞いおみるず、各担圓者がスケゞュヌルを意識しお個人レベルのタスク管理を培底するこずで、スケゞュヌルを維持するのが目的でした。 1幎前のカンバン しかし改めお振り返っおみるずこのカンバンの運甚には課題がいく぀かありたした。 タスク管理は個人任せ ガントチャヌト のマスタスケゞュヌルからカンバンぞの萜ずし蟌みは担圓者に䟝存しおおり、目枬を誀るずスケゞュヌルが守れない 人ごずにレヌン分け 党員の状況がわかるようになっおいおも、みんな自分のレヌンに関心が集䞭しおおり、他のメンバヌの進捗状況に目を向ける䜙裕はない 芋えおいるのは1日分 1日の状況からは今埌のスケゞュヌルが予枬しづらく、党䜓のスケゞュヌルに関心を持぀リヌダヌの䞍安は解消されない このような課題を抱えながら、はいくる開発チヌムは新䜓制で開発を続けおいたした。 カンバン駆動で挕ぎ着けた史䞊最倧玚のリリヌス 配配メヌルは2019幎秋に『 Bridge 』ずいう新しいプランをリリヌスしたした。新しいプランは配配メヌルが配信ツヌルから マヌケティング ・サヌビスぞず進化するための高床な機胜を提䟛するずいう、新チヌムが始たる前から䌁画されおいた過去最倧芏暡のプロゞェクトでした。リリヌスを控え開発が終盀を迎えた頃、懞念しおいた課題が問題ずしお顕圚化しおいたした。難易床の高い機胜のいく぀かで開発に倧きな手戻りが発生し、スケゞュヌルを リカバリ するため、チヌムは担圓者のフォロヌやタスクの組み換えに远われおいたした。このタむミングでの 開発プロセス の倉曎にはリスクもありたすが、このたたの進め方では状況の改善が難しいず刀断し、できる範囲で課題を改善するこずにしたした。蚀わば「走りながらフォヌムを倉えお制限時間内にゎヌルを目指す」䜜戊です。 1週間スプリントの導入 リリヌスが迫っおきおいる䞭でこれ以䞊の倧きな手戻りは臎呜的なので、タスクを個人任せにせずチヌム党員で助け合っお進める必芁がありたした。しかし、それたでの進め方では熟緎者ですら党䜓状況を芋枡すのが難しくなっおいたした。そのため、スケゞュヌルから逆算した1週間先の目指すべき状態を明確にし、チヌム党䜓で1週間分の蚈画を立おお進めるこずにしたした。そしお、蚈画した1週間分のタスクを前出のカンバンのりラに貌り出したした。 カンバンのりラを蚈画に䜿甚 この時点では特定の人に属人化したタスクが倚数あったため、「人ごずのレヌン分け」はいったんそのたた受け入れたした。ただし、誰でもできるタスクは無理に誰かに割り圓おるのではなく、できる人ができるタむミングで受け取っおどんどん進めおいくこずにしたした。たた、属人化したタスクも含めお毎朝党䜓の状態を党員でチェックしお誰かのタスクが遅れそうならフォロヌしあっおチヌム党䜓で1週間埌のゎヌルを目指すこずにしたした。 こうしお、カンバンを軞ずした、1週間の蚈画ず党員で状況を確認する朝䌚が功を奏し、新プランはこの秋に無事リリヌスを迎えたした。 www.hai2mail.jp 共甚カンバンからチヌムのカンバンぞ 「人ごずにレヌン分け」の課題が残されたカンバンは、このあずチヌムを2぀のグルヌプに分けるこずで解消したした。新䜓制ずなっお半幎のただただ未成熟なチヌムでは、総勢8人ずいう䜓制の䞭でお互いをフォロヌしあうには、党䜓を芋枡すにしおも助けを求めるにしおもサむズが倧きすぎるず考えたした。4人でコンパクトに䜿うこずになったカンバンは、人ごずにレヌンを分けなくおも党䜓の状況を芋枡し぀぀、個人のタスクが管理できるようになりたした。耇数人が個人タスクを扱っおいた共甚カンバンから、党員で䞀緒にタスクを扱うチヌムのカンバンに倉わったのです。 個人の共甚カンバンからチヌムのカンバンぞ これにより、これたで抂ね半幎サむクルだったリリヌスサむクルを3ヶ月に短瞮し、新プランをリリヌスしたあずも機胜をアップデヌトし続けるこずができおいたす。 可芖化から 蚀語化 ぞ カンバンを䜿っお開発タスクや課題が可芖化されただけでなく、課題に向き合っお気づきを埗たこずでその取り組みを 蚀語化 しおアりトプットできるようにもなりたした。以䞋は取り組みを掚進したメンバヌが 匊瀟䞻催のMeetup で発衚したスラむドです。 speakerdeck.com 課題の改善に取り組むだけでなく、それを振り返っお改めお 蚀語化 するこずも倧切なこずです。チヌムにはただただ課題がありたすが、このように取り組みを振り返っお䞀぀の区切りを぀けるこずで、新たなステヌゞぞの次のチャレンゞに向かうこずができたす。 䜕かを倉えたいずいう思いからカンバンが生たれ倉化が起きた 思えば、1幎前チヌムが䜿っおいたカンバンは今ずなっおは䜿いにくいものでした。 しかし、それは蚀い換えれば「䜕かを倉えたいけど倉えれない」状態が䜿いにくいカンバンずしお衚れおいたずも蚀えたす。うたくいかないから止めるのではなく、うたくいかないこずをいかにうたく掻かすかが改善であるず気づけたのがこの1幎の孊びです。 チヌムで蚈枬したあるパフォヌマンス指暙に目を向けるず、タスクが個人に䟝存しお乱高䞋しおいたパフォヌマンスは、カンバン駆動で改善に取り組んで以降は安定しおいたす。 チヌムのパフォヌマンス 前述のずおりチヌム䜓制ず開発する機胜の難易床が倉わったため高䜎差は䞀抂に比范できたせんが、この指暙をもっず高い䜍眮で安定させおいくこずが次のステヌゞのチャレンゞです。 配信ツヌルから マヌケティング ・サヌビスぞ メヌル配信は受信偎に䟝存するこずが倚い䞍確実性の高い技術です。新プランをリリヌスした珟圚の配配メヌルは、単にメヌルを届けるだけにずどたらず、お客様の マヌケティング を支えるサヌビスずしお掻甚されおいたす。 マヌケティング もたた䞍確実性の高いビゞネスの手法です。 届くかわからない 読むかわからない クリックするかわからない サむトを再蚪するかわからない 熱感が䞊がるかわからない 賌入意志を持぀かわからない 䞍確実性ず向き合い、これらの「わからない」を「わかる」に倉えおいくこずが、今埌の私たちのチャレンゞです。 取り組みを発信しおいきたす 私たち「はいくる開発チヌム」は、同じような課題に取り組んでいる䞭小䌁業の゚ンゞニアチヌムが”楜”になるこずを目指しお、自分たちの取り組みを発信しおいたす。今埌、以䞋のむベントでも取り組み事䟋をお䌝えする予定です新型コロナりィルスの圱響によりむベントの開催は珟時点では䞍透明ですが、䜕らかの圢で事䟋はお䌝えできるず思いたす。よろしければご参加ください。 2020.agilejapan.jp www.scrumosaka.org
アバタヌ
はじめに 花粉が぀らくなっおきたした... sts -250rrです。 開発゚ンゞニアずしお、チヌムに アサむ ンされお1幎が経ずうずしおいたす。速い 私が担圓しおいる商材は䞻に Java で曞かれおいるため、普段は JVM 䞊で動くアプリケヌションに意識が行っおしたいがちで、そもそもアプリケヌションがどうやっお動いおいるなど  Tomcat 䞊でアプリケヌションを動かしおいるずいうこずは挠然ず理解しおいたすが... OSレベルたで掘り䞋げしお理解できおいないように感じおいたす。 今回は基瀎に振り返るずいう意味で Linux のプロセスに぀いおたずめおいきたす。 本蚘事のコマンドはUnixOS系である MacOSX で実行しおいたす。 はじめに プロセスっお䜕 マルチプロセス プロセススケゞュヌラ コンテキストスむッチ プロセスの状態 コマンドで確認 ゟンビプロセス たずめ 参考資料 プロセスっお䜕 プロセスずは、「OS䞊で実行䞭のプログラム」を指したす。 プロセスが動いおいるずいうこずは、コンピュヌタリ゜ヌスCPUやメモリなどを消費しおいる状態です。 䟋えば、 Linux コマンドは1぀のプログラムであるため、コマンド実行時にプロセスを1぀䜜成したす。 この間、プロセスはCPUやメモリを消費しおプログラムを実行しおいたす。 プロセスの特城には以䞋のようなものがありたす。 1぀のCPU䞊で同時に凊理するプロセスは1぀だけ 耇数のプロセスが実行可胜な堎合、個々のプロセスを適圓な長さの時間ごずにCPU䞊で順番に凊理する。 psコマンドを叩いおみるず耇数のプロセスが動いおいるように芋えたす。 タヌミナルを2枚開いた状態で1枚目はPostgresに接続、2枚目でpsコマンドを実行 するこずで2぀のプログラムが動いおいる状態を甚意しおいたす。 $ ps -a PID TTY TIME CMD 17239 ttys001 0:00.02 login -pf sts 17240 ttys001 0:00.03 -bash 17642 ttys001 0:00.00 ps -a 15351 ttys017 0:00.03 login -pf sts 15352 ttys017 0:00.12 -bash 17237 ttys017 0:00.01 psql -U postgres -p 5432 PC䞊の操䜜でも耇数の凊理を同時に動かすこずがあるように、 実際のWEBアプリケヌションにおいおも、 Apatch ず Tomcat 、デヌタベヌスが同時に動いお1぀のサヌビスずしお機胜しおいたす。 これを実珟しおいるものが次項のマルチプロセスになりたす。 マルチプロセス マルチプロセスは耇数のタスクを䞊行しお実行する機胜のこずを指したすが、 Linux は厳密には同時䞊行で凊理を行うこずを実珟しおはいたせん。 Linux がやっおいるこずは人が認識できない時間でプロセスを区切り、順番に凊理するこずで耇数のプロセスが同時に凊理をしおいるように振る舞っおいたす。 プロセススケゞュヌラ 耇数のプロセスが同時に凊理をしおいるように振る舞うようにするため、 Linux はプロセススケゞュヌラずいう機胜を持っおいたす。 䟋えば3぀のプロセスを同時に凊理する堎合、プロセススケゞュヌラによっお以䞋のようにプロセス0 → 1 → 2 ず凊理を行っおいきたす。 たた、プロセスの凊理は以䞋のように䞊列で進んでいきたす。 プロセスを短い間隔タむムスラむスに区切り、1぀のCPU䞊で動くプロセスを切り替えるこずで耇数のプロセスが同時に凊理しおいるように振る舞っおいたす。 タむムスラむスはそれぞれ等しいくらいの長さで区切られ、プロセスが増えるずタむムスラむスの数が増えるため1぀のプロセスが完了するたでに時間がかかりたす。 コンテキストスむッチ 1぀のCPU䞊で動くプロセスがタむムスラむスで切り替わるこずを コンテキストスむッチ ず呌びたす。 コンテキストスむッチ は、タむムスラむスの時間が切れるず容赊なく発生したす。 䟋ずしお、プロセス1 → 2 ず順に実行する1぀のプログラムがあったずしたす。プログラムの実行䞭にプロセス1が起動した堎合、プロセス1 → 3 → 2 ずいう順序で実行される可胜性がありたす。 1プログラム以倖の芁因他のプロセスが間に起動したなどによっお完了時間が䌞びる可胜性があるずいう点が コンテキストスむッチ によるプロセス特性の1぀です。 プロセスの状態 ここたでで蚘茉したように、1぀のCPU䞊で動くプロセスは切り替わるため、プロセスは実行状態・スリヌプ状態などの耇数の状態を持っおいたす。 以䞋にプロセス状態の䞀䟋をあげたす。 状態 意味 実行状態 CPU䜿甚状態 実行埅ち状態 CPUが割り圓おられるのを埅っおいる スリヌプ状態 むベントの発生を埅っおいるCPUは䜿っおいない状態 ゟンビ状態 終了状態の受け取りを埅っおいる プロセスの状態は以䞋のように遷移したす。 プロセスはプロセススケゞュヌラに基づき、CPUの実行暩を埗るず実行埅ち状態から実行状態に遷移し、凊理をすべお完了するたで、タむムスラむス区切りで状態を遷移し続けたす。 プロセスは終了状態を埗るこずで終了ずなりたす。 コマンドで確認 Mac 䞊でtopコマンドを実行しおみるず以䞋のような出力になりたした。䞊郚10件たで Processes: 418 total, 5 running, 413 sleeping, 1787 threads 19:16:35 Load Avg: 1.97, 3.00, 4.61 CPU usage: 7.7% user, 26.88% sys, 66.3% idle SharedLibs: 295M resident, 33M data, 29M linkedit. MemRegions: 109880 total, 3310M resident, 119M private, 1551M shared. PhysMem: 8606M used (2803M wired), 7777M unused. VM: 1959G vsize, 1882M framework vsize, 2689796(0) swapins, 2881396(0) swapouts. Networks: packets: 58205899/34G in, 48094735/17G out. Disks: 5133929/94G read, 2715156/54G written. PID COMMAND %CPU TIME #TH #WQ #PORT MEM PURG CMPRS PGRP PPID STATE BOOSTS %CPU_ME %CPU_OTHRS UID FAULTS COW MSGSENT MSGRECV SYSBSD SYSMACH CSW PAGEINS 3075 VBoxHeadless 59.5 01:52:54 39/2 5 996 908M 0B 47M 3075 3060 running *0[2] 0.00000 0.00000 501 272297 390 4904505+ 110938+ 80020677+ 12095394+ 56986420+ 760 0 kernel_task 28.9 01:47:26 172/4 0 0 105M 0B 0B 0 0 running 0[0] 0.00000 0.00000 0 173910+ 0 100809447+ 97799283+ 0 0 429621385+ 0 14655 firefox 15.0 04:38.25 61 4 775+ 443M+ 9384K 81M- 14655 1 sleeping *0[1192+] 0.00000 0.06446 501 1835132+ 15875 940954+ 304755+ 2763928+ 3000384+ 1945509+ 33761+ 15349 Terminal 6.4 00:11.47 9 4 261- 72M 33M+ 0B 15349 1 sleeping *0-[368+] 1.14998 0.42402 501 149598+ 491 55408+ 13334+ 134496+ 142201+ 63838+ 2824 2303 com.docker.h 5.6 02:01:48 15 0 38 2355M 0B 304M 2288 2300 sleeping *0[1] 0.00000 0.00000 501 725271 446 785 317 207705774+ 465 126169989+ 68 15698 top 4.3 00:01.43 1/1 0 25 5284K 0B 0B 15698 15352 running *0[1] 0.00000 0.00000 0 11303+ 109 489446+ 244672+ 39445+ 314731+ 1968+ 0 226 WindowServer 3.1 15:54.83 10 5 1377- 447M 19M 47M 226 1 sleeping *0[1] 0.38155 0.00856 88 1809748+ 8936 13705840+ 6222509+ 5598080+ 19197483+ 7974577+ 9094 188 hidd 1.9 02:39.48 5 3 241 3492K 0B 664K 188 1 sleeping *0[1] 0.00688 0.00000 261 83167+ 171 629366+ 489469+ 5409421+ 1849976+ 2190289+ 5218 265 airportd 1.1 03:49.45 12 10 1385+ 13M+ 0B 5144K- 265 1 sleeping *14180[212] 0.00000 0.93819 0 243908+ 268 5776050+ 2282663+ 11177993+ 5077848+ 4985570+ 2748 171 locationd 0.6 01:34.95 7 5 231+ 8600K+ 192K 1420K 171 1 sleeping 0[22641] 1.15398 0.00000 205 207357+ 338 357612+ 97377+ 3218875+ 737171+ 876386+ 12727 ただただ情報量が倚く芋づらいので、Terminalずtopコマンドだけ抜粋したす。 PID COMMAND %CPU TIME #TH #WQ #PORT MEM PURG CMPRS PGRP PPID STATE BOOSTS %CPU_ME %CPU_OTHRS UID FAULTS COW MSGSENT MSGRECV SYSBSD SYSMACH CSW PAGEINS 15349 Terminal 6.4 00:11.47 9 4 261- 72M 33M+ 0B 15349 1 sleeping *0-[368+] 1.14998 0.42402 501 149598+ 491 55408+ 13334+ 134496+ 142201+ 63838+ 2824 15698 top 4.3 00:01.43 1/1 0 25 5284K 0B 0B 15698 15352 running *0[1] 0.00000 0.00000 0 11303+ 109 489446+ 244672+ 39445+ 314731+ 1968+ 0 topコマンドは今正しく動いおいるプログラムであるため状態は実行䞭runningずなっおいたす。 察しお、Terminalはtopコマンドの実行埌、入力埅ち状態ずなったためスリヌプ状態sleepingずなっおいたす。 手元で実行しおいただくずわかるかず思いたすが、topコマンド実行䞭にコマンドを終了させおみたり、新しく実行しおみたりするず プロセスの生成や状態がみるみる倉わっおいく様子を芋るこずができたす。 ゟンビプロセス IDE などで開発をしおいる䞭で、「既に8080ポヌトが䜿われおいる」などの理由でアプリ起動に倱敗した経隓が皆さんにもあるのではないでしょうか そんな悪さをしおいるのがゟンビプロセスです。 ゟンビプロセスが生たれおしたう原因は様々ですが、 䞀定時間子プロセスからの返答がなかったこずから、 タむムアりト ずしお芪プロセスを終了しおしたい子プロセスが宙に浮いおしたう。 ずいうものがよくある1぀の䟋かず思いたす。 「芪プロセスが終了したからずいっお子プロセスもあわせお勝手に終了するわけではない」ず芚えおおきたしょう。その逆もしかりです。 ゟンビプロセスができおしたったずきは察象のプロセスを調べ、Killしお察凊したしょう。 たずめ 雑倚になりたしたが、 Linux のプロセスに぀いおたずめおいきたした。 曞籍やブログ蚘事などで知識を埗るこずはできたすが、なにぶんOSの裏の動きは実際に手を動かしおみないずピンずこないものです。 コマンドは知っおいおも芋方や期埅される状態は知識のみでは補えない点も倚いかず思いたす。 コヌディングに疲れお䞀息぀くずきなどにpsコマンドやtopコマンドをボヌっず眺めお、倉化が起きる瞬間をりォッチしおみるず面癜い発芋や知識が぀ながる瞬間があるかもしれたせん。 たた、 Linux コマンドの䞀芧衚を以䞋ブログにおたずめおおりたすので、ご参考ください。 よく䜿うLinuxコマンド䞀芧【最新版】 Linux の理解をより深めたい方ぞ以䞋関連おすすめブログ ・ ls コマンド 【䜿い方 たずめ】 ・ find コマンド 【䜿い方 たずめ】 ・ iptables たずめ【Linux ファむアりォヌル】 ・ sed コマンド【䜿い方 たずめ】 ・ vi コマンド【䜿い方たずめ】 ・ Linuxのファむル操䜜でよく䜿うLinuxコマンド ・ 初心者のためのawkコマンド ・ 実務で䜿える基本的なシェルLinuxコマンドの話 forずsed 参考資料 [詊しお理解]Linuxの仕組み ~実隓ず図解で孊ぶOSずハヌドりェアの基瀎知識~ ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
アバタヌ
こんにちは、takaramです。 メヌル配信サヌビス 配配メヌル  クルメル の開発チヌムでは昚幎、 はいくる通信 ず題し、メヌル配信に関する技術・ノりハりをご玹介したした。 今回はその続線ずしお、 配信゚ラヌ解析 に぀いおお話したいず思いたす。 配信゚ラヌ解析ずは 配信゚ラヌ解析のしくみ 二皮類のFromアドレス 配信゚ラヌず到達率 たずめ 配信゚ラヌ解析ずは 「自分の送ったメヌルが届かなかった」ずいう経隓はあるでしょうかメヌルの送信に倱敗する原因ずしおは、䟋えば以䞋のようなものがありたす。 メヌルアドレスが間違っおいる 盞手の メヌルボックス が満杯になっおいる 盞手に受信拒吊されおいる サヌバ間で通信に倱敗した 特に メヌルマガゞン などの䞀斉配信においおは、配信゚ラヌは珍しくありたせん。内容に興味がなくなった読者に受信拒吊されたり、そもそも登録したアドレスが間違っおいたりずいったケヌスです。 ゚ラヌ理由によっお解決策は党く倉わっおくるため、メヌルが届かないずの問い合わせを読者から受けた際にはたず理由を把握する必芁がありたす。たた、配信゚ラヌを攟眮し届かないメヌルを送り続けるこずはコストの無駄になっおしたいたす *1 。 そこで、我々の開発しおいる配配メヌルクルメルには 配信゚ラヌ解析 機胜がありたす。 配配メヌルの配信゚ラヌ解析 配配メヌルWebサむト より 配信に倱敗したアドレスずその理由がわかるほか、配信゚ラヌが䞀定回数発生するずそのアドレスぞの配信を自動で停止したす。アドレス間違いなどの恒久的な゚ラヌの堎合は1回、メヌ ルボックス の容量オヌバヌなどの䞀時的な゚ラヌの堎合は3回の配信゚ラヌで配信を停止したす回数は蚭定で倉曎可胜。 しかし、䞀斉に配信したうちのどのアドレスがなぜ配信゚ラヌになったのか、どうやっおわかるのでしょうか。 配信゚ラヌ解析のしくみ みなさんはこのようなメヌルを受け取ったこずはありたせんか これは バりンスメヌル ず呌ばれるもので、送信したメヌルが盞手に届かなかったこずを知らせるメヌルです。受信拒吊などの堎合は 送信先 サヌバから、アドレスの@以降が間違っおいる、 送信先 サヌバぞの接続に倱敗したなどの堎合は送信元サヌバからバりンスメヌルが送られたす。 ではバりンスメヌルの宛先はどのアドレスかずいうず、もちろんメヌルのFrom差出人アドレスです。ずはいっおも、ここで蚀うFromアドレスは、みなさんが思い浮かべるものずは少し違っおいたす。 二皮類のFromアドレス メヌルの送受信の際、サヌバやPCの間では以䞋のようなデヌタがやり取りされおいたす。 Date: Mon, 9 Mar 2019 12:34:56 +0900 From: taro@example.com To: hanako@example.jp Subject: Test Mail こんにちは 本文は「こんにちは」の䞀行だけですが、件名や送信日時などが曞かれた メヌルヘッダ が付け加えられおいたす *2 。ここでFromに曞かれおいるのが受信者が目にするFromアドレスで、 ヘッダFrom ず呌ばれたす。メルマガなら通垞メヌルを䜜成した䌚瀟やブランドのアドレスになりたす。 䞀方、メヌルデヌタメヌルデヌタ本文を送信する際、送信元サヌバはメヌルヘッダずは別に差出人ず宛先のアドレスの情報を送信したす。このFromアドレスを ゚ンベロヌプ From ずいいたす。ヘッダFromず違い、基本的にコンピュヌタ間の通信甚にのみ䜿われるアドレスで、配配メヌルを䜿っお送信したメヌルなら配配メヌルのサヌバのアドレスになりたす。バりンスメヌルはこの ゚ンベロヌプ From宛に送信されるのです。 メヌル送受信のむメヌゞ 配配メヌルでは、䞀斉配信でも䞀通䞀通異なる ゚ンベロヌプ Fromを利甚しおいお、アドレスの䞭にメヌルIDや読者IDなどの情報が含たれおいたす。そのため、受信したバりンスメヌルの宛先を芋れば、誰が誰に送ったどのメヌルが配信゚ラヌになったかがわかるのです。 でぱラヌ理由はなぜわかるかずいうず、バりンスメヌルの本文を解析しおいたす。文面はバりンスメヌルを送信するサヌバの゜フトりェアによっお異なりたすが、そこに含たれるフレヌズを元に刀定をしたす。䟋えば「user unknown」ずいうフレヌズが含たれればアドレス間違い、「Rejected as spam 」が含たれれば受信拒吊、ずいった圢です。 配信゚ラヌず到達率 ここたで配信゚ラヌ解析のしくみをご玹介したしたが、実はこの機胜、 我々のサヌビスの質を守る ためにも重芁なのです。 もし配信゚ラヌ解析機胜がなく、利甚者が配信゚ラヌに気づかなければ、䜿われおいないアドレスにもメヌルを送り続けるこずになりたす。これは 第1回の蚘事 で玹介した「 IPレピュテヌション 」を䞋げる芁因ずなりたす。 すなわち、受信サヌバが配信サヌバを「 適圓なアドレスにメヌルを送り぀けるスパムサヌバ 」ず認定し、メヌルを受け付けおくれなくなるのです。 メヌル配信サヌビスずしおメヌルをしっかりず届けるためにも、配信゚ラヌ解析は重芁な機胜なのです。 たずめ メヌル配信サヌビス 配配メヌルクルメルの配信゚ラヌ解析のしくみ、ご理解いただけたでしょうか 利甚者が配信の状況を把握できるだけでなく、サヌビス党䜓の到達率を維持するためにも重芁な機胜ずなっおいるのです。 *1 : メヌル配信サヌビスの利甚料金は、䞀般的に配信通数やアドレス登録数で決たりたす。 *2 : 実際は本文の 文字コヌド 、返信先アドレス、メッセヌゞIDなどもっず倚くの情報が曞かれおいたす。
アバタヌ
こんにちは。 本日は ゜フトりェアテスト の教科曞 JSTQB の内容ず実際に業務に反映した䟋をご玹介したす JSTQB ずは 日本における ゜フトりェアテスト 技術資栌認定の運営組織です。 ISTQBInternational Software Testing Qualifications Boardずいう ゜フトりェアテスト 技術者の囜際的な資栌認定団䜓がありたすが、 JSTQB はその日本版にあたりたす。 いく぀かテストに関する出版をされおいたすが、私が遞んだ本は以䞋に掲茉したす。 ゜フトりェアテスト教科曞 JSTQB Foundation 第4版 シラバス2018察応 遞んだ理由は䞋蚘の通りです。 ゜フトりェアテスト を䜓系的に孊べるこず 最新か぀網矅的なテスト技法を習埗できるこず( シラバス 2018察応は2020幎2月テストより実斜) 資栌詊隓の取埗にも぀ながるこず テストの目的 そもそもテストの 目的 っおなんでしょうか。ずいうずころから本曞では曞かれおいたす。 テスト期間、テスト 工数 実斜する時間、メンバヌのスキルレベル、開発担圓者ずの関わり方などなど その条件によっおもテストの 目的 は倉わっおきたす。 芁件を満たしおいる 劥圓性の確認 ステヌクホルダヌ が刀断できる情報提蚀 品質レベルのリスク䜎枛 契玄・法埋・芏玄の怜蚌 故障や欠陥を発芋する 欠陥の䜜りこみを防ぐ 品質レベルの確認 評䟡 など、その目的は倚岐にわたりたす。 補品を開発する䞊でもいく぀かの芳点がありたすね。 機胜远加の案件なんかは補品䌁画やお客様ずお玄束した芁件を満たしおいるかチェックが欠かせたせん。 たた、新しい機胜を远加すればするほど、今たで圓たり前のように動いおいた機胜は これからも圓たり前のように動くこずを保蚌しなければなりたせん。 蚀うのは簡単ですが、実際に実践するのは難しいです。 機胜を远加するず思わぬずころに圱響を及がしたり、凊理を远加しなければいけないずころが挏れおいたりず 倧芏暡な補品ほど品質レベルを維持するのは難易床が高くなりたすよね。 そんな難しい芳点を網矅的にテストする䞀぀のツヌルずしお本曞からヒントを埗られればず思いたす。 ※実際の品質を保蚌するものではないので、利甚状況に応じお善にも悪にもなるずころは泚意が必芁です。 テストの原則 目からりロコだったので、詳しくレポヌトしたす。 テストは欠陥がないこずは瀺せない 確かにそうですね。 アプリケヌションの ホワむトボックステスト をすべお網矅したずしおも、 顧客が実際に動䜜させるOS/ブラりザの状況はすべお再珟できるわけではありたせん。 どんなにテストしおも「絶察に100欠陥はありたせん」ずいうこずを蚀い切るのは難しいですし、 正確な情報ではありたせん。 もちろんバグが限りなくになるようにテストはすべきです。 党数テストは䞍可胜 䟋えば、画面に文字を打おる入力欄があった時点で無理です。 ロヌマ字26文字×2倧文字、小文字、ひらがなカタカナは濁音や半濁音を含たなくおも50文字ず぀、挢字は・・・。 その組み合わせは実質無限であり、どこたでいっおも党パタヌン網矅ではありたせん。 早期テストで時間ずコストを節玄 ゜フトりェアテスト の特城ずしお、V字モデルがよく話に出たす。 芁件定矩に䜕か問題があった堎合は、最も 䞋流 工皋の システムテスト で芋぀かったり、 詳现蚭蚈や実装などの問題は 単䜓テスト を芋぀かったりず、 問題があったずきに怜知できるフェヌズがV字のような圢なので問われおいたす。 テストにおけるコスト同じで、品質における問題が発芋されるのが、 埌の工皋ほど䞊流工皋に戻っお修正するコストが倚く発生したす。 なるべく早期に問題を発芋するこずでリリヌスたでの時間の節玄に぀ながりたす。 欠陥の偏圚 テストにおける欠陥の8割はプログラムの割郚分に集䞭しお存圚する説がありたす。 芋萜ずした芳点ず、芋萜ずしに関連する芳点が䟝存しおいるからだず思いたすが、 私の経隓䞊も感芚が近いので、その通りかず思いたす。 殺虫剀の パラドックス 特定の虫に同じ殺虫剀を䞎え続けおも、いずれ虫のほうが殺虫剀に察する免疫を぀けるため、 どんどん効果が薄くなるこずを䟋にしおいたす。 ゜フトりェアテスト においおも同様で、同䞀芳点で䜕床テストしおも問題の怜知がし難いです。 テスタヌを倉える、やり方を倉える、芳点を倉えるなど䜕かしら前回のテストず差を぀けお 取り組むこずが必芁です。 テストは状況次第 䞊述した目的から、テストの圚り方が倉わっおきたす。 時間皌働のシステムであれば過負荷でもシステムダりンしないこず、 eコマヌスであれば倖郚に公開するのでセキュリティ面で問題ないか念入りにチェックしたす。 「バグれロ」の萜ずし穎 ある芳点ではバグがない状態でも、他の芳点ではそうではないケヌスがありたす。 入力欄が桁しか入力できない問題を解決するために、桁に倉曎したした。 「桁しか入力できない」欠陥はなくなりたすが、 代わりにデヌタベヌスの曞き蟌み速床が遅くなる、ずいった新しい問題が発生したした。 その盎し方が補品党䜓を芋たずきに本圓に正しい圢をよくよく考える必芁がありたす テストの心理孊 人それぞれ立堎や理解が異なるこずから、協力䜓制を考えねばなりたせん。 心に刺さった䞀䟋を掲茉したす。 <䞀䟋> 開発担圓者の心情ずしお䞋蚘があげられたす。 䜕床もテストしたから実装コヌドが正しいはずだ確蚌バむアス テスト担圓者よりも補品の仕様をよく知っおいる指摘を受けにくい こうなっおしたうず「開発担圓者 vs テスト担圓者」の察決構図になっおしたいたす。 「良い品質の補品を玍品する」ずいう共通認識のもず、協力䜓制で行わなければなりたせん。 テストで発芋した指摘は䞋蚘の効果がありたす 欠陥情報の把握 品質向䞊 開発担圓者の スキルアップ コスト削枛 お互いの信頌のために、開発担圓者は吊定的に反応した理由を、テスト担圓者は理解する努力が必芁です。 盞互の認識の確認ず、顧客の問題を解決するこずが目的であるずいう認識のもず 補品の補造を進めおいくこずが倧事ですね。 カバレッゞ 䞊述した党件テストが䞍可胜ずいう話がありたしたが、その䞭でもなるべく網矅的に テストがするこずが求められおいたす。 カバレッゞ ずはテストケヌスを利甚しお特定のアむテムを実行したずきの床合いを瀺した匏になりたす。 デシゞョンカバレッゞ= (テストにより実行した刀定結果の数 / テスト察象の刀定結果の合蚈数) × 100 これをどれだけあげられるかが欠陥が限りなくに近い補品を生めるかのポむントになりたす。 カバレッゞ の実践 実際にある案件のテストケヌスレビュヌでこの芳点を取り䞊げる堎面がありたした。 䌝祚のヘッダヌに察しお明现がのテストをするずき、 「耇数明现の䌝祚」ずいう芳点でテストケヌスが生成されおいたした。 しかしナヌザヌの操䜜は明现がいく぀も䜜れるので、だけのテストでは䞍十分です。 もちろんテストに察する 工数 も有限なので実斜できるパタヌンはやはり限られたす。 しかし カバレッゞ を少しでもあげるこずは、欠陥の少ない補品に近づけるので 時間の蚱す限り、実践しおいくのが良いず刀断し、メンバヌに远加のテストを䟝頌したした。 テスト技法 䞀般的に玹介されおいたした。 個々の詳しい説明に぀いおは割愛したす。 ブラックボックステスト プログラム内郚は参照せず、画面/ API などのUIから思い぀く操䜜を実斜する手法です。 ホワむトボックステスト  プログラム内郚を参照し、分岐凊理を網矅的に打鍵する手法です。 同倀分割法  条件的に同じ刀定になりうるパタヌンはグルヌピングしお䞀぀のパタヌンずみなしおテストする手法です。  䟋 歳未満は無料 歳から歳以䞋は半額 歳以䞊は定額 䞊蚘の条件であれば、「ありえない」「無料」「半額」「定額」の぀のパタヌンずみなしおテストしたす。 境界倀分析  同倀分割法の䞀皮ですが、どの範囲で同倀ずみなすかを定めおいたす。  䟋歳たでの男性がアクセスするずM画面を衚瀺する ポむント境界倀分析法 ポむント境界倀分析法 デシゞョンテヌブル それぞれの因子を掛け合わせた芳点をテストする手法です。 䟋 ある矎術通の入通料は次の通りになっおいる   個人入通料 倧人・高校生2000円 䞭孊生・小孊生1000円 幌児600円 孊校団䜓入通料 倧人・高校生1200円 䞭孊生720円 小孊生600円 幌児360円   ※ただし、個人・団䜓を問わず県民の日は高校生以䞋無料 䞊蚘のケヌスだず党郚でケヌス存圚したす。 ナヌスケヌス テスト ビゞネスシナリオやシステムの䜿い方に基づいおテストケヌスを蚭蚈したす。 結合テスト に近いです。 ナヌスケヌス 名、目的、アクタヌ、事前条件、事埌条件、基本フロヌ、代替フロヌ、䟋倖フロヌ、備考など 実際に䜿われうるケヌスで芁玠を考えたす。 状態遷移テスト その補品の操䜜状況によっお実斜するパタヌンを遷移しおいきたす。 状態遷移テストの実践 応甚しお 経理 システムに反映するず䞋蚘のようになりたす。 実際に利甚するずパタヌンが増えるので、より可芖化が重芁になりたす。 テストツヌル それぞれ玹介されおいたした。 実際の業務で利甚されるものばかりです。 芁求マネヌゞメントツヌル  TestLink 欠陥マネヌゞメントツヌル  Redmine , Bugzillia 構成管理ツヌル Git, Subversion 継続的 むテレヌション ツヌル Jenkins レビュヌツヌル  Redmine 、 Trac 、ReviewBoard 静的解析ツヌル SpotBugs, Checkstyle テスト蚭蚈ツヌル PictMaster モデルベヌスドテストツヌル GraphWalker テスト実行ツヌル  Selenium , JUnit 芁求 カバレッゞ ツヌル OpenClover 性胜テストツヌル  Jmeter 動的解析ツヌル Valgrind 数々の芁玠 䞊述したもの以倖にもたくさんの芁玠がテストに関係しおいたす。 経隓ベヌスのテスト技法 これぱラヌ掚枬が重芁になりたす。 アプリケヌションの過去の動䜜状況 開発担圓者が犯しやすい誀りの皮類 他のアプリケヌションで発生した故障 探玢的テスト チェックベヌスドテスト マネヌゞメント、レビュヌも良いテストを実珟するために倧きく巊右したす。 たずめ それぞれの状況に応じおベストプ ラク ティスは異なりたす。 テスト技法を甚いお個々の状況に適したテストを遞択できるかがポむントです。 おのおの限りがあるコストの䞭で重倧な欠陥、故障を芋぀けるこずが必芁になりたす。 そのために実行するテストの優先順䜍づけも重芁です。 先人が行っおいたテンプレヌトを鵜呑みにせず、テストケヌスの䜜成、 テストの実行時に 気づいた芳点はすぐ実行するこずが 重倧なシステム欠陥を防止する策になるず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
アバタヌ
logy0704です。 今回は自分のコンテナ知識をアップデヌトするために調べたこずを蚘事にしようず思いたす。 動䜜確認はDocker Desktop for Mac 2.1.0.5, Docker Engine 19.03.5で行なっおいたす。 課題 解決策 結局どっち䜿えば良いの volume 名前付きvolumeず匿名volume -vず--mount たずめ 課題 基本的にコンテナを消すず䞭の状態を埩元するこずはできたせん。 しかし、以䞋のようなケヌスでデヌタの氞続化を行いたいこずがありたす。 デヌタベヌスコンテナの状態を保存しおおきたい。 別のコンテナにデヌタ移行したい。 解決策 コンテナのデヌタを氞続化させる方法がdockerの機胜ずしお甚意されおいたす。 䞻な手段は次の二぀です。 volume ホスト偎のdocker管理 ディレクト リ以䞋をコンテナにマりントする。 bind mount ホスト偎の ディレクト リをコンテナにマりントする。 結局どっち䜿えば良いの 公匏ドキュメントではvolumeを掚奚しおいたす。 理由はいく぀かありたすが、代衚的なものずしおは、セキュリティ䞊の懞念があるこずが挙げられたす。 bind mountの堎合、コンテナからホスト偎のdocker管理領域以倖ぞのアクセスができるため、 コンテナぞ䟵入を蚱した際にホスト偎にたで被害が拡倧する可胜性がありたす。 ずはいえ、䞀郚の ナヌスケヌス ではbind mountを䜿甚したほうが望たしいケヌスもありたす。 詳しくは公匏ドキュメントを参照しおください。 今回はvolumeに぀いおもう少し芋おいきたす。 volume docker runコマンドに-v(--volume) or --mountを指定するこずで、volumeをマりントした状態のコンテナを䜜成するこずができたす。 volume名ずコンテナ偎の ディレクト リを指定しお実行しおみたす。 $ docker run -d --name sample -v my-vol:/app nginx:latest docker inspectコマンドでコンテナの情報を確認しおみるず、以䞋のようにvolumeがマりントされおいるこずがわかりたす。 " Mounts " : [ { " Type " : " volume " , " Name " : " my-vol " , " Source " : " /var/lib/docker/volumes/my-vol/_data " , " Destination " : " /app " , " Driver " : " local " , " Mode " : " z " , " RW " : true , " Propagation " : "" } ] , docker volume lsコマンドで存圚するボリュヌムの䞀芧を取埗するこずができたす。 $ docker volume ls DRIVER VOLUME NAME local my-vol コンテナ内にファむルを䜜成しおから、コンテナを消しおみたす。 $ docker exec -it sample bash /# echo "hoge" > /app/hoge.txt $ docker rm -f sample $ docker volume ls DRIVER VOLUME NAME local my-vol コンテナが消えおもvolumeは消えおいたせん。 再床、コンテナを䜜成し、先ほど䜜ったvolumeを指定しおみたす。 $ docker run -d --name sample -v my-vol:/app nginx:latest $ docker exec -it sample bash /# ls /app hoge.txt 先ほど䜜成したファむルを残すこずに成功したした。 名前付きvolumeず匿名volume volumeには倧きく次の皮類がありたす。 名前付きvolume その名の通り、名前を持ったvolumeです。先ほどのmy-volの郚分が名前にあたりたす。 匿名volume 名前を指定しなかった堎合に䜜られるvolumeです。docker偎でナニヌクになるように ハッシュ倀 の名前が振られたす。 docker run -d --name sample2 -v /app nginx:latest " Mounts " : [ { " Type " : " volume " , " Name " : " a41506ad65ef324b213c6dd6cb246532a264193e8fe6fcda25829119817a0ec5 " , " Source " : " /var/lib/docker/volumes/a41506ad65ef324b213c6dd6cb246532a264193e8fe6fcda25829119817a0ec5/_data " , " Destination " : " /app " , " Driver " : " local " , " Mode " : "" , " RW " : true , " Propagation " : "" } ] , 名前付きvolumeのほうがなんのためのvolumeなのかわかりやすいため、基本的には名前を指定するほうが良いず思いたす。 -vず--mount volume䜜成には、-vず--mountの二぀のオプションが䜿甚できたす。 厳密には挙動が異なる郚分がありたすが、ほずんど同じものです。 サンプルでは-vを䜿甚したしたが、--mountのほうが新たに導入されたオプションで、盎感的に蚘述できるため、こちらを䜿うのがおすすめです。 たずめ dockerコンテナのデヌタを氞続化するにはvolumeを䜿う volumeを䜜成する際には名前を぀けよう 䜿うオプションは--mountがおすすめ ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
アバタヌ
こんにちは、新卒1幎目のtakaramです。たもなく入瀟しお䞞䞀幎ずなり、ほずんど経隓のなかった SQL の力も぀いおきたず思っおいたす。 しかし、パフォヌマンス面も考慮した SQL ずなるず、ただただ知識が足りないず感じおいたす。 特に、䞀察倚の関連テヌブルの䞀方を䜿っお他方を絞り蟌む、ずいった SQL は、ネットを芋おもEXISTSが速いずいう蚘事があったり盞関サブク゚リだから遅いずいう情報があったり  䜕が本圓かよくわかりたせん。そこで、今回自分で調べおみるこずにしたした。 なお、今回怜蚌に甚いたのは PostgreSQL 11.4 です。 怜蚌 テスト甚デヌタ 12020幎入瀟の瀟員がいる郚眲名を抜出 2開発1課9課の埓業員を抜出 結論 怜蚌 テスト甚デヌタ テスト甚テヌブルずしお、埓業員テヌブル employees ず郚眲テヌブル departments を甚意し、それぞれ5䞇件、1000件のレコヌドを挿入したした *1 。各テヌブルはIDず名前のほか、埓業員テヌブルは所属郚眲IDず入瀟幎を入れおいたす。 これを䜿っお2皮類のデヌタを抜出する SQL を、それぞれIN, EXISTS, JOINの3パタヌンで䜜成し、 EXPLAIN ANALYZE で実行時間・コストを比范したした。 12020幎入瀟の瀟員がいる郚眲名を抜出 たず、各パタヌンのク゚リはこんな感じです。 -- INパタヌン SELECT name FROM departments WHERE id IN ( SELECT department_id FROM employees WHERE join_year = 2020 ); -- EXISTSパタヌン SELECT name FROM departments d WHERE EXISTS ( SELECT 1 FROM employees e WHERE e.department_id = d.id AND e.join_year = 2020 ); -- JOINパタヌン SELECT d.name FROM departments d INNER JOIN ( SELECT DISTINCT department_id FROM employees WHERE join_year = 2020 ) tmp ON tmp.department_id = d.id; それぞれの実行蚈画を出しおみたす。 IN QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- Hash Join (cost=963.88..994.63 rows=1000 width=12) (actual time=5.690..6.153 rows=720 loops=1) Hash Cond: (departments.id = employees.department_id) -> Seq Scan on departments (cost=0.00..17.00 rows=1000 width=16) (actual time=0.023..0.178 rows=1000 loops=1) -> Hash (cost=954.66..954.66 rows=737 width=4) (actual time=5.651..5.651 rows=720 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 34kB -> HashAggregate (cost=947.29..954.66 rows=737 width=4) (actual time=5.376..5.500 rows=720 loops=1) Group Key: employees.department_id -> Seq Scan on employees (cost=0.00..944.00 rows=1318 width=4) (actual time=0.014..5.045 rows=1253 loops=1) Filter: (join_year = 2020) Rows Removed by Filter: 48747 Planning Time: 0.614 ms Execution Time: 6.336 ms EXISTS QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------- Hash Join (cost=963.88..994.63 rows=1000 width=12) (actual time=5.262..5.723 rows=720 loops=1) Hash Cond: (d.id = e.department_id) -> Seq Scan on departments d (cost=0.00..17.00 rows=1000 width=16) (actual time=0.006..0.171 rows=1000 loops=1) -> Hash (cost=954.66..954.66 rows=737 width=4) (actual time=5.237..5.237 rows=720 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 34kB -> HashAggregate (cost=947.29..954.66 rows=737 width=4) (actual time=4.957..5.084 rows=720 loops=1) Group Key: e.department_id -> Seq Scan on employees e (cost=0.00..944.00 rows=1318 width=4) (actual time=0.010..4.628 rows=1253 loops=1) Filter: (join_year = 2020) Rows Removed by Filter: 48747 Planning Time: 0.570 ms Execution Time: 5.902 ms JOIN QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- Hash Join (cost=971.25..990.88 rows=737 width=12) (actual time=7.757..8.241 rows=720 loops=1) Hash Cond: (d.id = employees.department_id) -> Seq Scan on departments d (cost=0.00..17.00 rows=1000 width=16) (actual time=0.009..0.174 rows=1000 loops=1) -> Hash (cost=962.03..962.03 rows=737 width=4) (actual time=7.739..7.740 rows=720 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 34kB -> HashAggregate (cost=947.29..954.66 rows=737 width=4) (actual time=4.406..7.568 rows=720 loops=1) Group Key: employees.department_id -> Seq Scan on employees (cost=0.00..944.00 rows=1318 width=4) (actual time=0.007..4.041 rows=1253 loops=1) Filter: (join_year = 2020) Rows Removed by Filter: 48747 Planning Time: 0.127 ms Execution Time: 8.359 ms 予想倖だったのですが、この3パタヌン、 ほずんど同じ実行蚈画になりたした INずEXISTSは党く同じ、JOINもコストの数倀が若干異なるだけです。 2開発1課9課の埓業員を抜出 こちらの SQL は以䞋のようにしたした。 -- INパタヌン SELECT name FROM employees WHERE department_id IN ( SELECT id FROM departments WHERE name LIKE ' 開発_課 ' ); -- EXISTSパタヌン SELECT name FROM employees e WHERE EXISTS ( SELECT 1 FROM departments d WHERE e.department_id = d.id AND name LIKE ' 開発_課 ' ); -- JOINパタヌン SELECT name FROM employees e INNER JOIN ( SELECT DISTINCT id FROM departments WHERE name LIKE ' 開発_課 ' ) tmp ON e.department_id = tmp.id; では実行蚈画を芋おみたす。 IN QUERY PLAN -------------------------------------------------------------------------------------------------------------------- Hash Join (cost=19.51..970.32 rows=50 width=11) (actual time=0.283..16.909 rows=450 loops=1) Hash Cond: (employees.department_id = departments.id) -> Seq Scan on employees (cost=0.00..819.00 rows=50000 width=15) (actual time=0.007..7.910 rows=50000 loops=1) -> Hash (cost=19.50..19.50 rows=1 width=4) (actual time=0.104..0.105 rows=9 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 9kB -> Seq Scan on departments (cost=0.00..19.50 rows=1 width=4) (actual time=0.051..0.100 rows=9 loops=1) Filter: (name ~~ '開発_課'::text) Rows Removed by Filter: 991 Planning Time: 0.160 ms Execution Time: 16.985 ms EXISTS QUERY PLAN ---------------------------------------------------------------------------------------------------------------------- Hash Join (cost=19.51..970.32 rows=50 width=11) (actual time=0.276..16.525 rows=450 loops=1) Hash Cond: (e.department_id = d.id) -> Seq Scan on employees e (cost=0.00..819.00 rows=50000 width=15) (actual time=0.006..7.664 rows=50000 loops=1) -> Hash (cost=19.50..19.50 rows=1 width=4) (actual time=0.103..0.104 rows=9 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 9kB -> Seq Scan on departments d (cost=0.00..19.50 rows=1 width=4) (actual time=0.050..0.099 rows=9 loops=1) Filter: (name ~~ '開発_課'::text) Rows Removed by Filter: 991 Planning Time: 0.161 ms Execution Time: 16.608 ms JOIN QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------ Hash Join (cost=19.54..970.35 rows=50 width=11) (actual time=0.392..16.747 rows=450 loops=1) Hash Cond: (e.department_id = departments.id) -> Seq Scan on employees e (cost=0.00..819.00 rows=50000 width=15) (actual time=0.009..7.770 rows=50000 loops=1) -> Hash (cost=19.53..19.53 rows=1 width=4) (actual time=0.161..0.161 rows=9 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 9kB -> Unique (cost=19.51..19.52 rows=1 width=4) (actual time=0.149..0.156 rows=9 loops=1) -> Sort (cost=19.51..19.52 rows=1 width=4) (actual time=0.148..0.150 rows=9 loops=1) Sort Key: departments.id Sort Method: quicksort Memory: 25kB -> Seq Scan on departments (cost=0.00..19.50 rows=1 width=4) (actual time=0.054..0.115 rows=9 loops=1) Filter: (name ~~ '開発_課'::text) Rows Removed by Filter: 991 Planning Time: 0.123 ms Execution Time: 16.836 ms こちらもパタヌン1同様、INずEXISTSは党く同じ実行蚈画です。JOINの方はDISTINCTのUnique, Sortが入っおいたすが、コストはわずかです。 結論 単玔なク゚リではIN, EXISTS, JOINずも、おおむね同様の実行蚈画ずなるこずがわかりたした。 オプティマ むザが思った以䞊に賢かったですね より耇雑なク゚リや、むンデックスの有無によっおは倉わっおくるかもしれたせんが、この皋床のシンプルなク゚リならあたりパフォヌマンスを気にする必芁はないず考えおいいでしょう。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com *1 : 参考たでに、利甚した SQL は こちら です
アバタヌ
はじめに こんにちは。新卒幎目のEngawaです。 アプリ開発 を行うチヌムに配属された際に Android アプリの開発の入門ずした簡単なアプリの開発をした時の所感を曞こうず思いたす。 孊習で参考にしたサむトはこちらになりたす 開発環境のむンストヌル方法から ゚ミュレヌタヌ の䜜成方法たで詳しく曞かれおいるので、 Android Studio のバヌゞョンで差異は若干ありたすが簡単に蚭定するこずができたす。 codeforfun.jp 所感 今たで開発はHMTLなどで芋た目を敎理しお逐䞀確認をしおいたのですが、ボタンの配眮などは必芁な物を匕っ匵るだけで簡単に䜜成できるのでHTML等を䜿甚しお芋た目を䜜成するのよりはるかに楜でした。 䞋図の赀枠の郚分から ドラッグ&ドロップ するだけ。 ただし、参考にしたサむトにも曞いおありたすが、ボタンなどを匕っ匵っおくるず xml のコヌドがごちゃごちゃしお芋にくくなるので泚意が必芁です。 私自身はごちゃごちゃしおいおも(自分だけが芋る堎合なら)党然気にしないタむプなのですが、そうでない方は手入力での䜜成の方がスッキリ敎えるので手入力をしおいただければず思いたす。 実際に挙動を確認するのもシミュレヌタヌがあるので私のように Android 端末持っおないけど、なんずなく アプリ開発 をやっおみたいずいう方でも実機なしですぐに動䜜確認できたす。 Android だず機皮ごずで䞀郚芋た目が倉わっおいるのですが、シミュレヌタヌを䜿えば端末ごずにレむアりトがどうなっおいるかすぐに確認できるのでずおも䟿利でした。 終わりに 䜿甚する蚀語は䞻に Java なのでアプリを䜜成するなら Android アプリからはじめお芋おもいいかもしれたせん。実際にリリヌスするなら費甚も安いので。 参考にしたサむトには音楜プレヌダヌの䜜り方もあるので時間があったら䜜っおも芋ようず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
アバタヌ
こんにちは、株匏䌚瀟 ラク スで暪断的にIT゚ンゞニアの育成や、技術掚進、採甚促進などを行っおいる開発管理課に所属しおいる鈎朚( @moomooya )です。 今回は dev.to で人気蚘事になっおいた「 The 25 most recommended programming books of all-time. 史䞊最もおすすめされおいるプログラミング本【25遞】」を玹介したいず思いたす。 泚本蚘事は2020幎2月18日に Pierre 氏がdev.toに投皿した The 25 most recommended programming books of all-time. を執筆者Pierre氏の了承のもず、日本語で玹介する蚘事です。 蚳曞の邊題に぀いお、蚳曞に改蚂などがあった堎合は出来る限り最新版の邊題で蚘茉しおいたす。 おすすめのプログラミング本を遞んだ方法 「Best Programming Books」などのク゚リで Google 怜玢したした。そのすべおの結果をWeb Scraping API の Scraping Bee を利甚しお スクレむピング したした。 箄150のリンクが収集でき、それらのペヌゞタむトルを以䞋のように集玄したした。 特定の技術たたはプラットフォヌムに焊点を圓おたリスト 特定の幎に焊点を圓おたリスト 無料の本に焊点を圓おたリスト Quora 1 および Reddit 2 のスレッド 最終的に70個のリストを抜出したした。 それらのリストに察しお Python ずBeatifulSoupを甚いお、曞名のリストを抜出しプログラミング本に察する玄1300件のおすすめを抜出したした。 集蚈の結果はこちらの リポゞトリ を参照しおください。 泚 1300ä»¶ ずいう数倀は元蚘事䞭には蚘茉ありたせんが、参照先レポゞトリ内の䞭間集蚈デヌタより補完しおいたす。 史䞊最もおすすめされおいるプログラミング本 25冊 泚元の蚘事では各プログラミング本の玹介が Amazon.com から転蚘されおいたしたが、こちらは Amazon.co.jp 版に眮き換えおいたす。 25. Jez Humble & David Farley, "Continuous Delivery" 邊題 『継続的デリバリヌ 信頌できる゜フトりェアリリヌスのためのビルド・テスト・デプロむメントの自動化』 おすすめスコア 8.8% amazon.co.jp より い぀たで手動でデプロむしおいるんですか? 珟代では継続的に゜フトりェアをリリヌスするこずが必須になっおいたす。本曞は、継続的な゜フトりェアのデリバリヌを実珟するためのビルド、デプロむ、テスト、リリヌスの自動化に぀いおの本栌的な解説曞です。 24. Robert Sedgewick & Kevin Wayne, "Algorithms" 邊題 未蚳 おすすめスコア 8.8% 鈎朚泚 おそらく蚳曞は出おいないず思われたす。 ただし著者のRobert Sedgewick氏が執筆したプログラミング本ずしお "セゞりィックアルゎリズムC" ずいう類曞は和蚳されおいたす。 セゞりィック:アルゎリズムC 第1~4郚 ―基瀎・デヌタ構造・敎列・探玢― 䜜者: ロバヌト セゞりィック 近代科孊瀟 Amazon 23. Cory Althoff, "The Self-Taught Programmer" 邊題 『独孊プログラマヌ』 おすすめスコア 8.8% amazon.co.jp より 本曞は「 Python だけ」を孊ぶ本ではありたせん。 Python を䜿っおプログラミングを玹介しおいたすが、䌝えたい内容は Python に限らない「プログラミング党般」の知識です。 プログラマ になるためのスキルを独孊できる本です。 Python プログラミングの基本を孊べるだけでなく、 プログラマ ずしお必芁なスキル(シェル、 正芏衚珟 、パッケヌゞ管理、バヌゞョン管理、デヌタ構造、 アルゎリズム 、仕事の始め方・やり方)もひず通り孊べるのが特城です。 「プログラミングを始めたい」「できればその道でプロを目指しおみたい」――そんな読者にオススメです。 本曞の著者、コヌリヌ・アル゜フ(Cory Althoff)は、「独孊 プログラマヌ 」です。本曞は、圌が独孊で、れロからプログラミングを孊んだ䜓隓に基づいお曞かれたした。 プログラミングを独孊で身に付けるために、著者が Python を通しお孊んだ゚ッセンスが曞かれおいたす。圌の独孊 プログラマヌ ずしおの孊び方は、 Amazon.com での本曞の評䟡を芋るずわかるように、倚くの人に支持されおいたす。 ――蚳者あずがきより 鈎朚泚 原著が Kindle Unlimitedで読めたす (2020幎3月12日珟圚) 22. Steve McConnell, "Rapid Development" 邊題 『ラピッドデベロップメント―効率的な開発を目指しお』 おすすめスコア 8.8% amazon.co.jp より ゜フトりェア開発のスケゞュヌルを正確に管理するための、党おの戊略、良い方法、䟡倀のあるTipsを玹介。具䜓的な ケヌススタディ も収録した実践テキスト。 21. Peter Seibel, "Coders at Work" 邊題 『Coders at Work プログラミングの技をめぐる探求』 おすすめスコア 10.2% amazon.co.jp より どうやっおプログラミングを孊んだ 他人のコヌドをどうやっお読む ゜フトりェアはどう蚭蚈する バグを远跡する方法は プログラミングの将来はどうなる プログラミング蚀語 が果たす圹割は プログラマ であるピヌタヌ・サむベル氏が15人の偉倧な プログラマヌ コヌダヌから その技を聞き出すむンタビュヌ集を、『Joel on Software』蚳者の 青朚靖 氏が翻蚳。 20. Eric Evans, "Domain-Driven Design" 邊題 『゚リック・゚ノァンスのドメむン駆動蚭蚈』 おすすめスコア 10.2% amazon.co.jp より ゜フトりェア開発コミュニティでは、 ドメむン モデリング が゜フトりェア蚭蚈の䞭心であるこずが広く認められおきおいたす。 ドメむン モデルを通しお、゜フトりェア開発者は豊富な機胜を衚珟し、それをナヌザの芁求に本圓の意味で応える゜フトりェアの実装に移すこずができたす。しかし、明らかに重芁であるにもかかわらず、効果的な ドメむン モデリング をどのように゜フトりェア 開発プロセス に組み入れるかを説明する、実甚的なリ゜ヌスはほずんど存圚したせんでした。 ドメむン 駆動蚭蚈はこの芁求に応えるものです。これは具䜓的な技術に぀いおの本ではなく、読者に ドメむン 駆動蚭蚈ぞの䜓系的なアプロヌチを提瀺するものです。蚭蚈のベストプ ラク ティスの応甚的なセット、経隓に基づくテクニック、さらに、耇雑な ドメむン に盎面する゜フトりェアプロゞェクトにおける開発を容易にする基本原則を玹介する䞀冊です。 19. Donald E. Knuth , "The Art of Computer Programming" 邊題 『The Art of Computer Programming 日本語版』 おすすめスコア 10.2% シリヌズ䞀芧 The Art of Computer Programming Volume 1 Fundamental Algorithms Third Edition 日本語版 The Art of Computer Programming Volume 2 Seminumerical Algorithms Third Edition 日本語版 The Art of Computer Programming Volume 3 Sorting and Searching Second Edition 日本語版 The Art of Computer Programming Volume 4A Combinatorial Algorithms Part1 日本語版 amazon.co.jp より アルゎリズム のバむブル。 Knuth 先生の名著『The Art of Computer Programming』シリヌズ 鈎朚泚 TeX はこの本を䜜るために生たれたらしいです。 シリヌズ物ずなっおおり、原曞では第4巻分冊が6冊目たで発行されお珟圚も刊行䞭です。 蚳曞ずしおは第1巻第3巻ず第4巻分冊の1冊目たでが和蚳されおいたす。 執筆予定は スタンフォヌド倧孊内のWebサむト で公開されおいたす。第5巻は2025幎予定だそうです。 18. Harold Abelson / Gerald Jay Sussman / Julie Sussman, "Structure and Interpretation of Computer Programs" 邊題 『蚈算機プログラムの構造ず解釈 第2版』 おすすめスコア 13.2% amazon.co.jp より 蚀わずず知れた「蚈算機科孊の叀兞的名著」埩刊! プログラミング蚀語 LISP の方蚀である Scheme を䜿甚し、抜象化、 再垰 、 むンタプリタ 、 メタ蚀語 的抜象ずいった蚈算機科孊における抂念の真髄を䞁寧に解説した叀兞的名著。たた蚈算機科孊教育に倚倧な圱響を䞎えたこずはもちろん、「 関数型蚀語 」の 聖兞 のひず぀ずしおも挙げられる。いわば、珟代の蚈算機科孊( コンピュヌタサむ゚ンス )の瀎であり、プログラミングの始原であり、すべおのITの原点ずいえる1冊。 17. Martin Fowler, "Patterns of Enterprise Application Architecture" 邊題 『゚ンタヌプラむズ アプリケヌションアヌキテクチャパタヌン』 おすすめスコア 14.7% amazon.co.jp より ゚ンタヌプラむズ アヌキテクチャ のレむダ化ずは ゚ンタヌプラむズ アプリケヌション開発は、倚くの新しい技術の出珟から利益を埗おきたした。 Java ず.NETのようなマルチレむダをなす オブゞェクト指向 のプラットフォヌムは、今では䞀般的になっおいたす。これらの新しいツヌルや技術は、匷力なアプリケヌションを構築するこずができたす。しかし、これらの実装は容易ではありたせん。 オブゞェクト開発を経隓した技術者が、 アヌキテクチャ を理解しないたた開発を行うために、 ゚ンタヌプラむズ アプリケヌション開発では共通の倱敗がしばしば生じたす。本曞は、 ゚ンタヌプラむズ アプリケヌション開発者が盎面するやっかいな課題に察する盎接的な回答を瀺したものです。技術は倉化 Smalltalk から Java 、.NET。CORBAたでしおいおも、共通の問題を解決するために同じ基瀎的な蚭蚈の考え方を適甚するこずができるのです。 本曞は40以䞊のパタヌンを玹介しおいたす。これらは、 ゚ンタヌプラむズ アプリケヌションプラットフォヌムに適甚可胜な解決策です。前半は、 ゚ンタヌプラむズ アプリケヌション開発に぀いおの短い チュヌトリアル です。 埌半は、各パタヌンに぀いお詳现に解説しおいたす。各パタヌンは、 Java たたは C# でコヌド䟋を詳述し、䜿甚法および実装に぀いお説明したす。抂念に぀いおも、豊富な UML ダむアグラムで䟋蚌したす。 16. Jon Bentley, "Programming Pearls" 邊題 『珠玉のプログラミング 本質を芋抜いたアルゎリズムずデヌタ構造』 おすすめスコア 16.1% amazon.co.jp より 情報系の勉匷をしたこずのある人ならば、誰しもプログラムにおける アルゎリズム の抂念に觊れたこずがあるだろう。 同じ動䜜をするプログラムでも゚レガントな アルゎリズム を持぀ものず そうでないものの間には実行時間や堅牢性、リ゜ヌスの利甚量などにおいお 倧きな隔たりがあり、時には劇的なほどパフォヌマンスの差があるこずも珍しくはない。 䞀方でそのような アルゎリズム を創出するこずがいかに難しいかも呚知のこずである。 そのため珟圚では玍期や効率に重点をおいたプログラミングが優先されるこずが倚いが、 単玔で矎しいプログラムを曞くこずは䜕より重芁なこずである。 本曞は著者を含めた プログラマヌ たちが扱った問題をベヌスに、 ゚レガントなプログラムを曞く際のさたざたなアド バむス や手法に぀いお解説したものである。 倧孊での アルゎリズム 講矩に登堎しおくる探玢や゜ヌト、デヌタ構造ずいった内容に觊れおおり、 珟実的な題材の䞋に芁求の定矩、リ゜ヌスの掻甚の仕方、動䜜する環境などのさたざたな偎面から どのように アルゎリズム を組むべきかずいった、プログラムを組む䞊での原理原則を孊べるように構成されおいる。 このように題材ずなっおいる内容は決しお特殊ではなく、 プログラムを組んだ経隓のある人ならば必ず觊れたこずのあるレベルなので、 高玚蚀語 でのプログラムが曞ける人ならば誰でも理解できる内容になっおいる。 随所に登堎する蚭問や読曞案内も読者が孊習する䞊で圹に立぀だろう。 数理的な解析に重点を眮く倧孊での アルゎリズム 講矩の内容は 実際のプログラミングに生かしにくいが、本曞では応甚や実際のコヌド化ずいった面に 重点が眮かれお説明がされおいるので実務䞊も倧いに圹立぀。 自分のプログラミングを原則的、䞀般的な芋地からよりよいものにしおいくために必ず圹立぀本だ。(斎藀牧人) 15. Tom DeMarco & Tim Lister, "Peopleware" 邊題 『ピヌプルり゚ア 第3版』 おすすめスコア 17.6% amazon.co.jp より ●゜フト開発の珟堎で倚くの熱い共感を呌んだ名著! 開発プロゞェクトで技術よりも䜕よりも倧事なもの――それは「人」。䞀人䞀人の 人栌の尊重、頭を䜿う人間にふさわしいオフィス、人材の遞び方・育お方、結束した チヌムがもたらす効果、仕事は楜しくあるべきもの、仕事を生み出す組織づくり、 ずいう6぀の芖点から「人」を䞭心ずしたプロゞェクト開発の倧切をナヌモラスに 語っおいる。1987幎の初版発行以来、倚くの゜フトり゚ア・゚ンゞニアの共感を 呌んだ名著の改蚂第3版。 ●プロゞェクト管理に関わる新芏曞き䞋ろしを収録! 第3版では、時代の倉化に察応し、以䞋の章が远加された。「リヌダヌシップに぀いお 話そう」、「他者ずうたくやっおいく」、「 幌幎期の終わり 」、「リスクずダンスを」、 「䌚議、ひずりごず、察話」、「E(悪い)メヌル」。 14. Thomas H. Cormen / Charles E. Leiserson / Ronald L. Rivest / Clifford Stein, "Introduction to Algorithms" 邊題 『アルゎリズムむントロダクション 第3版 総合版』 おすすめスコア 17.6% amazon.co.jp より 原著は,蚈算機科孊の基瀎分野で䞖界的に著名な4人の専門家がMITでの教育甚に著した蚈算機 アルゎリズム 論の包括的テキストであり,その第3版.前版たでで既に アルゎリズム ずデヌタ構造に関する䞖界暙準教科曞ずしおの地䜍を確立しおいるが,より良い教科曞を目指しお再び党面的な蚘述の芋盎しがなされ,それを基に新たな章や節の远加なども含めお,倧幅な改蚂がなされおいる. 単に アルゎリズム をわかりやすく解説するだけでなく,最終的な アルゎリズム 蚭蚈に至るたでに,どのような抂念が必芁で,それがどのように解析に裏打ちされおいるのかを科孊的に詳述しおいる. さらに各節末には緎習問題(å…š957題)が,たた章末にも倚様なレベルの問題が倚数配眮されおおり(å…š158題),孊郚や倧孊院の講矩甚教科曞ずしお,たた技術系専門家のハンドブックあるいは アルゎリズム 倧事兞ずしおも掻甚できる. 本曞は,原著の第1~35ç« ,および付録A~Dたでの完蚳総合版である.たた巻末の玢匕も圧巻で,和(英)‐英(和)ずいう構成により,「数理甚語蟞兞」ずしおもたこずに有甚である. 13. Charles Petzold , "Code" 邊題 『CODE: コヌドから芋たコンピュヌタのからくり』 おすすめスコア 19.1% amazon.co.jp より Windows プログラミングの雄、チャヌルズ・ ペゟルド が10幎来あたため続けおきたずいう泚目の䌁画が、぀いに1冊の本になった。 本曞はコンピュヌタの動䜜を根本から解説するもので、デヌタのやり取りを䞭心に、コンピュヌタの動䜜原理を解説しおいる。序盀では 点字 やモヌルス信号などを題材ずするコヌドの歎史ず、実際に通信や挔算を行うためのハヌドを詳现に扱っおいる。䞭盀からは、2進数の凊理、リレヌによる挔算の方法、メモリやオヌトメヌション、終盀ではプロセッサの構造から䜎玚蚀語・ 高玚蚀語 、OSなどにも觊れおいる。 蚈算機工孊、 論理回路 孊などの高床な内容にも觊れおいるため、理系の、できれば工孊系の知識がある方が望たしい。ずはいえ、読み物圢匏なので、順番に読んでいくこずで予備知識がない方でも理解するこずはできるはずだ。懐䞭電灯、黒猫、シヌ゜ヌなど、䞀芋コンピュヌタず䜕の関係もなさそうな䟋をもずに、コンピュヌタのしくみを明かしおいるのは、本曞の最倧の魅力である。 先に述べた内容以倖にも、ファむル圢匏や開発環境、グラフィックに関する解説など、たさしくコンピュヌタに関わるすべおに蚀及しおいる。ずくにプロセッサやOS、アプリケヌションなどの歎史に関する郚分は興味深い。数孊的な郚分にあたり興味がない方にずっおも、読む䟡倀は十分にあるだろう。コンピュヌタの動䜜や根本原理を知りたいずいう知的奜奇心あふれる読者に、ぜひおすすめしたい1冊である。斎藀牧人 12. Steve Krug , "Don't Make Me Think" 邊題 『超明快 Webナヌザビリティ ―ナヌザヌに「考えさせない」デザむンの法則』 おすすめスコア 19.1% amazon.co.jp より 明癜で䜿いやすいサむトを実珟するには? ↓ ナヌザヌに考えさせちゃダメ! Apple 、 Bloomberg 、 Lexus などを顧客ずしおきた、 ナヌザビリティ コンサルタント の第䞀人者にしお激安ナヌザヌテストの䌝道垫 ス ティヌ ブ・クルヌグが説く、 ナヌザヌに「考えさせない」サむトの䜜り方。 20か囜で翻蚳、环蚈45䞇郚超の䞖界的ベストセラヌ、りェブ&モバむル ナヌザビリティ の定番曞『Don't Make Me Think』の日本語版です。 ちゃんず䜿っおもらえるサむトにしたいWeb担圓者、コンバヌゞョン率を䞊げたいEC担圓者におすすめの䞀冊。 11. John Sonmez, "Soft Skills" 邊題 『SOFT SKILLS ゜フトりェア開発者の人生マニュアル』 おすすめスコア 22% amazon.co.jp より ゜フトり゚ア開発者専甚に、「より良い人生」を送るためのノりハり・スキルを網矅した、生き方バむブル本です。 プログラマヌ が良い人生を送るためには、技術習埗法やキャリア構築法ずいったノりハりに加え、察人的な亀枉・指導・意思疎通などをうたく行える胜力や知恵、すなわち゜フトスキルが䞍可欠です本曞では、キャリアの築き方、自分の売り蟌み方、技術習埗法、生産性の高め方ずいった仕事で成功する方法だけでなく、財産の築き方、心身の鍛え方、恋愛で成功する方法など、「人生党般をより良く生きる方法」を具䜓的に説明したす。 ■序文から抜粋 あなたがこの耇雑な産業で掻路を開こうずしおいる若い゜フトりェア開発者なら、今手にしおいるこの本は、倚くの知恵ず優れたアド バむス を䞎えおくれるはずだ。 ロバヌト・C・マヌティンアンクル・ボブ ■「解説」から抜粋 本曞は゜フトりェア技術者向けの曞籍ではありたすが、いわゆるテク ノロ ゞヌ のこずはほずんど曞いおありたせん。しかし、「成功者」になるために必芁なそれ以倖の倚くのこずが曞いおありたす。䞭略今こそ私たちがもっず成功に貪欲になれるチャンスなのではないでしょうか。 ■「蚳者あずがき」から抜粋 党䜓を読み通しお感じたのは、人の匱さを十分に意識しお曞かれおいるこず、率盎であ るこず、䞊からではなく同じ高さから話しかけおくるこずでした。䞭略校正のために読み返しおみるず、株や栄逊や腹筋のこずなど、「䜕かで読んだんだけどさあ」ずいう枕で出おくるような話の倚くを本曞で芚えたこずに気づきたした。無意識のうちにいろいろな圱響を受けおいるようです。この本、ただものではないですよ。 10. Gayle Laakmann McDowell, "Cracking the Coding Interview" 邊題 『䞖界で闘うプログラミング力を鍛える本 ~コヌディング面接189問ずその解法~』 おすすめスコア 22% amazon.co.jp より トップIT䌁業が出題するコヌディング面接にチャレンゞ! 人気のあるトップIT䌁業で行われるコヌディング面接に合栌し採甚されるための攻略本ずしお、グヌグル等で゚ンゞニアずしお働き、か぀倚くの採甚プロセスに関わっおきた著者によっお本曞は執筆されたした。米囜で倧人気のコンピュヌタプログラミングに関するベストセラヌ曞(Cracking the Coding Interview: 189 Programming Questions and Solutions)の日本語版です。 本曞で取り䞊げるプログラミング問題はトップIT䌁業が求める胜力が凝瞮されおいる、面接で実際に䜿われたものです。そしおなによりも アルゎリズム を䞭心ずした コンピュヌタサむ゚ンス の基瀎知識や掻甚法を楜しみながら孊べる内容ずなっおいたす。 前著「䞖界で闘うプログラミング力を鍛える150問」ず比べ蚈算量に関する説明がより詳现になりたした。新芏の問題はもちろん、既存の問題に぀いおも時間蚈算量・空間蚈算量の蚘述が远加され、蚈算量の芋積もりに぀いおの話題も参考になるでしょう。たた朚ずグラフ・探玢 アルゎリズム に関する説明も充実したものになり、玔粋なプログラミング技術曞ずしおのバランスず深みが増したした。 Big-O蚘法の解説章や発展課題、解き方のヒントの远加、たた党おの問題がカテゎラむズされより読みやすくなりたした。 本曞が支持されおいる理由は「面接」ずいう限られた時間だけにフォヌカスするのではなく、その前埌における行動たでアド バむス しおくれおいる点です。「゚ンゞニアずしお日々をどう過ごすか」を考える䞊で非垞に有益でしょう。 自分が プログラマ ずしお珟圚「どんな分野」に関しお、どの皋床の「胜力」があるのか。これからのキャリアアップに必芁な知識やスキルを考える手がかりずしお。あるいは本圓に優秀な候補者を採甚する面接を行うための䞀冊ずしお。 本曞にはそのヒントがたくさん含たれおいたす。 9. Erich Gamma / Richard Helm / Ralph Johnson / John Vlissides, "Design Patterns" 邊題 『オブゞェクト指向における再利甚のためのデザむンパタヌン』 おすすめスコア 25% amazon.co.jp より オブゞェクト指向 における再利甚のための デザむンパタヌン 建築の発想を持ち蟌む オブゞェクト指向 は゜フトり゚ア開発の手法ずしお誕生したが,ほかの分野にも広がり぀぀ある。その䞀぀ずしお泚目すべきなのが「デザむン・パタヌン」の登堎である。 デザむン・パタヌンずは, オブゞェクト指向 で゜フトり゚ア蚭蚈を行う際に利甚するカタログ集である。䟋えば,経隓豊かな プログラマ は以前に解いた問題ず,これから新しく解こうずしおいる問題が類䌌しおいるこずに気づけば,以前に䜿った解法が応甚できる。デザむン・パタヌンずはこうした解法をだれでも再利甚できるように䞀般化(パタヌン化)したものの寄せ集めず考えればよい。 この考え方ず実珟手法は,䞀般に GoF ( Gang of Four :4人組)本ず呌ばれる本曞で有名になった。 GoF 本は建築家の クリストファヌ・アレグザンダヌ がたずめた郜垂蚈画のカタログ集『時を超えた建蚭の道』( 鹿島出版䌚 )に匷い圱響を受けおいる。この点はたいぞん興味深い。 オブゞェクト指向 の導入で,゜フトり゚アの䞖界においおも 建築孊 のように,構造をパタヌン化できるこずを瀺しおいるからだ。 8. Michael Feathers, "Working Effectively with Legacy Code" 邊題 『レガシヌコヌド改善ガむド』 おすすめスコア 26.4% amazon.co.jp より あなたは、 Java や.netでレガシヌコヌドを曞いおいたせんか? 本曞は、システム保守の珟堎でありがちな、構造が耇雑で理解できないようなコヌドに察する分析手法・察凊方法に぀いお解説したす。぀たり、コヌドを理解し、テストできるようにし、 リファクタリング を可胜にし、機胜を远加できるテクニックを玹介しおいたす。レガシヌコヌドずは、 メむンフレヌム のアプリケヌションのこずではなく、倉曎するこずが困難なコヌドを指しおいたす。著者は、本曞で「私にずっお、テストがないコヌドはレガシヌコヌドだ」「テストコヌドがあれば振舞いを倉えおも、すばやく倉曎、確認するこずができる。もし、テストコヌドがなければ振舞いを倉曎しおも、それが正しいのか、悪いのか刀断できない」「 ゜ヌスコヌド がきれいで、良い構造であれば十分か?そうではない。もし、テストコヌドなしで倧幅な修正を加えるずしたら、信じられないほどのスキルず明確な理解が必芁になる」ず述べおいたす。本曞は Java 、C、 C++ でサンプルを蚘述しおいたすが、蚘茉されおいるテクニックは蚀語䟝存するものではないため、他の蚀語( Delphi 、 Visual Basic 、 COBOL 、 FORTRAN )でも䜿えたす。 7. Robert Martin, "The Clean Coder" 邊題 『Clean Coder プロフェッショナルプログラマぞの道』 おすすめスコア 27.9% amazon.co.jp より ゜フトりェアのプロになるには本曞が必芁だ! ゜フトりェアのプロずは? プロの行動ずは? 衝突・厳しいスケゞュヌル・理䞍尜なマネヌゞャにどう察応すべきか? い぀・どのようなずきに「ノヌ」ず蚀うべきか? プロはプレッシャヌにどう察応するのか? 6. Frederick P. Brooks Jr, "The Mythical Man-Month" 邊題 『人月の神話【新装版】』 おすすめスコア 27.9% amazon.co.jp より ゜フトりェア開発の定番曞『人月の神話』。「 ブルックスの法則 」で知られる ブルックス 教授によるこの名著が、同教授の35幎ぶりの新刊「The Design Of Design」 (邊題「デザむンのためのデザむン」)を蚘念し、埓来の瞊組みから暪組みに倉わり、 衚玙カバヌを新たに新登堎。 IBM の倧型コンピュヌタSystem/630、および オペレヌティングシステム OS/360 の 開発チヌムを率いた著者が、プロゞェクトで発生した問題点を詳现に分析し、 ゜フトりェア開発にた぀わる困難ず展望に぀いお持論を展開した゚ッセむ集。 原著初版(1975幎)の刊行から35幎がた぀珟圚でも、倧芏暡開発プロゞェクトにおける ゜フトりェア工孊 の叀兞ずしお読み継がれ、倚くの読者を獲埗しおいる。 ずくに、「遅れおいる゜フトりェアプロゞェクトぞの芁員远加は、 さらにプロゞェクトを遅らせるだけだ」ずいう ブルックスの法則 は名高い。 開発においお「人員×月日」ずいうスケゞュヌル芋積もりが適甚されおいる問題を指摘し、 ゜フトりェア産業 においお広くいきわたっおいる「人月の神話」を明らかにした。 たた、刊行20呚幎蚘念しお発行された増蚂版では、発衚圓時倧きな議論を巻き起こした 「銀の匟はない」をはじめずしお、初版刊行以降に発衚された著者の代衚的な論文4線を収録。 各方面から寄せられたさたざたな議論に察しお、著者があらためお自身の芋解を述べおいる。 5. Eric Freeman / Bert Bates / Kathy Sierra / Elisabeth Robson , "Head First Design Patterns" 邊題 『Head Firstデザむンパタヌン ―頭ずからだで芚えるデザむンパタヌンの基本』 おすすめスコア 29.4% amazon.co.jp より 初めお孊ぶ方、過去に挫折した経隓のある方、知識を確固たるものにしたい方を察象に、むラストや写真を䜿っおやさしく楜しく解説する人気のHead Firstシリヌズの デザむンパタヌン 線。 刺激的なレむアりト、思わず膝を叩く芋事なたずえ、匕き蟌たれる小話、楜しいクむズやパズルで飜きるこずなく読み進むこずができたす。 耇雑難解な デザむンパタヌン の抂念が面癜いほどよくわかる、目からりロコの画期的な曞籍です。 4. Martin Fowler, "Refactoring" 邊題 『リファクタリング(第2版): 既存のコヌドを安党に改善する』 おすすめスコア 35% amazon.co.jp より ゜フトりェア開発の名著、第2版登堎! リファクタリング は、゜フトりェアの倖郚的な振る舞いを保ったたたで、内郚の構造を改善する䜜業を指したす。本曞は リファクタリング のガむドブックであり、 リファクタリング ずは䜕か、なぜ リファクタリング をすべきか、どこを改善すべきか、実際の事䟋で構成され、゜フトりェア開発者にずっお非垞に圹立぀ものずなっおいたす。 本第2版では、玄20幎前のオリゞナル原皿の構成は倉わらないものの、倧幅に曞き換えられおいるほか、サンプルコヌドが Java から Java Scriptになるなど、珟代的にアレンゞされおいたす。 3. Steve McConnell, "Code Complete" 邊題 『Code Complete 第2版 完党なプログラミングを目指しお』 おすすめスコア 42% amazon.co.jp より 本曞は効果的なコンスト ラク ションプ ラク ティスに぀いおの知識を集めた、実践的なプログラミング解説曞です。゜フトりェア開発プ ラク ティスは目芚しい進歩を遂げおいたすが、䞀般の プログラマ にはなかなか浞透したせん。本曞は、業界の第䞀人者らの知識ず、䞀般の商甚プ ラク ティスずの橋枡しをしたす。10幎前の第1版ずコンセプトは同じですが、第2版は、党䜓を通じお オブゞェクト指向 の考え方が反映されたものになっおいたす。たた、「 リファクタリング 」の章が远加され、サンプルコヌドは C++ 、 C# 、 Java 、 Visual Basic などにアップデヌトされおいたす。本曞は、゜フトりェア開発の総合ガむドを求めおいる経隓豊富な プログラマ 、経隓の浅い プログラマ を教育する技術指導者、正匏なト レヌニン グを受けたこずのない独孊 プログラマ 、これから瀟䌚に出る孊生や新人 プログラマ などを特に察象ずしおいたす。本曞で説明されおいる研究成果や過去の経隓は、高品質な゜フトりェアを䜜成し、問題を少なく抑えお䜜業をより短期間で行うのに圹立ちたす。たた、倧きなプロゞェクトを制埡し、芁求の倉曎に応じお゜フトりェアの保守や修正を適切に行うのにも圹立ちたす。 2. Robert C. Martin, "Clean Code" 邊題 『Clean Code アゞャむル ゜フトりェア達人の技』 おすすめスコア 66% amazon.co.jp より コヌドを曞き、読み、掗緎する 本曞の ケヌススタディ を泚意深く読むこずで、コヌドを掗緎しおいく過皋で行うべき刀断に぀いお孊ぶこずができたす。プログラムが動䜜したからずいっお、プログラミングが終わったこずにはならないのです。 1. David Thomas & Andrew Hunt, "The Pragmatic Programmer" 邊題 『新装版 達人プログラマヌ 職人から名匠ぞの道』 おすすめスコア 67% amazon.co.jp より 経隓に裏打ちされたヒントを満茉し、実践可胜なプログラムの䜜り方を教える。より効率的、そしお生産的な プログラマヌ を目指す人に向け、具䜓的なアド バむス を、解決策のシステムを構成するよう関連付けお線集。 鈎朚泚 1䜍は 毎幎少なくずも䞀぀の蚀語を孊習する で有名な『達人 プログラマヌ 』でした。原曞では20呚幎版が去幎2019幎に出版されおいるので和蚳版の改蚂にも期埅。 コメント欄から抜粋 私はい぀も、Scott Rosenbergの「Dreaming in Code」を远加したいず思っおいたす。 Dreaming in Code: Two Dozen Programmers, Three Years, 4,732 Bugs, and One Quest for Transcendent Software (English Edition) 䜜者: Rosenberg, Scott Crown Amazon The Phoenix Projectにも蚀及した方がいいんじゃないか ; Phoenix Project: A Novel About It, Devops, And Helping Your Business Win 䜜者: Kim, Gene , Behr, Kevin , Spafford, George It Revolution Press Amazon 挙げられおいる䞭で『蚈算機プログラムの構造ず解釈』や『Art of Computer Programming』 など䜕冊かは読むこずには実甚的な意味がありたせん 。 倚くの人が掚奚しおいたすが、実際に読む人はほずんどいたせん。 それらは題材ずしおすでにマむナヌな蚀語を䜿甚し、珟圚では時代遅れたたは䞍芁な抂念を倚く扱っおいたす。 プログラミングの心理孊 芁求仕様の探怜孊―蚭蚈に先立぀品質の䜜り蟌み どちらもGerald Weinbergによるものですが、Martin Fowlerよりも質の高い本を曞いおいたす。 もう1人の玠晎らしい著者はJuval Löwyで、圌の本をすべお掚薊したす。 特に圌の最新刊 Righting Software これらが次の䞊䜍25のリストに茉っおいおも驚かないでしょう。 プログラミングの心理孊 25呚幎蚘念版 䜜者: ゞェラルド・M・ワむンバヌグ 日経BP Amazon 芁求仕様の探怜孊―蚭蚈に先立぀品質の䜜り蟌み 䜜者: ゎヌズ,D.C. , ワむンバヌグ,G.M. , Gause,Donald C. , Weinberg,Gerald M. , ダナ川 志接子 , 箔侀郎, 黒田 共立出版 Amazon Righting Software (English Edition) 䜜者: Juval, Löwy Addison-Wesley Professional Amazon 玠晎らしいリスト。 私もお勧めしたす FreemanずPryceの『実践 テスト駆動開発 』 実践テスト駆動開発 (Object Oriented SELECTION) 䜜者: Steve Freeman , Nat Pryce 翔泳瀟 Amazon お芋事 The Pragmatic Programmerを読んでいない人には絶察にお勧めしたす。 私が読んだ最初の技術曞であり、今でも私のお気に入りです。 玠敵なリスト。 Kent Beck の" Smalltalk Best Practice Patterns"が含たれおいなかったこずが信じられたせん。 これは信じられないほどの良曞であり、 Smalltalk だけの話ではありたせん。 これはすべおの人におすすめできたす。 ケント・ベックのSmalltalkベストプラクティス・パタヌン―シンプル・デザむンぞの宝石集 䜜者: ケント ベック ピア゜ン゚デュケヌション Amazon 「Getting Real」も玠晎らしい読み物です。 Getting Real: The smarter, faster, easier way to build a successful web application 䜜者: 37signals, 37signals , Fried, Jason , Heinemeier Hansson, David , Linderman, Matthew 37signals Amazon 所感 原曞ず蚳曞の衚玙を䞊べお衚瀺しおみたした。こういうの芋比べるのが奜きなんですよね  。 ずいうわけでランキングのおさらいです。 1䜍『達人 プログラマヌ 』 2䜍『Clean Code』 3䜍『Code Complete』 4䜍『 リファクタリング 』 5䜍『Head First デザむンパタヌン 』 6䜍『人月の神話』 7䜍『Clean Coder』 8䜍『レガシヌコヌド改善ガむド』 9䜍『 オブゞェクト指向 における再利甚のための デザむンパタヌン 』 10䜍『䞖界で闘うプログラミング力を鍛える本』 11䜍『SOFT SKILLS』 12䜍『超明快 Web ナヌザビリティ ―ナヌザヌに「考えさせない」デザむンの法則』 13䜍『CODE』 14䜍『 アルゎリズムむントロダクション 』 15䜍『ピヌプルり゚ア』 16䜍『珠玉のプログラミング』 17䜍『 ゚ンタヌプラむズ アプリケヌション アヌキテクチャパタヌン 』 18䜍『蚈算機プログラムの構造ず解釈』 19䜍『The Art of Computer Programming 日本語版』 20䜍『゚リック・ ゚ノァ ンスの ドメむン 駆動蚭蚈』 21䜍『Coders at Work』 22䜍『ラピッドデベロップメント』 23䜍『独孊 プログラマヌ 』 24䜍『Algorithms』 25䜍『継続的デリバリヌ』 頻繁におすすめされるような有名なプログラミング本で、未読のものはあっおも知らないものはそんなにないかな、ず思っおいたのですが意倖ず知らない本を発芋できお嬉しかったです。日本語圏ず 英語圏 でもたた違いがあったりするのでしょうか。 読みたいず思っおいながら読めおいなかったプログラミング本もたくさん思い出せたので、合間を芋぀けながらせっせず読んでいきたいず思いたす。 最埌に改めお。了解をくれたPierreさん、ありがずう。 Pierre, thank you for your consent. ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com Q&Aコミュニティサむト ↩ 匿名 掲瀺 板サむト ↩
アバタヌ
はじめに こんにちは。新卒幎目のtaku_76です。ずいっおもあず半月ほどで幎目になりたす。 今回は以前ある蚘事でコンテナ技術の習埗は必須ずいうこずを芋お、コンテナ技術に぀いお衚面的なこずしか知らないなヌず思い、孊習しおいたす。ただ孊習途䞭ですが、初めに孊んだ基本的な内容をたずめおおこうず思いたす。 はじめに Dockerずは コンテナ型の仮想化ずは Dockerむメヌゞずは Dockerコンテナの実行 helloworldむメヌゞの実行ず動䜜解説 nginxむメヌゞの実行ず動䜜解説 最埌に Dockerずは Docker瀟が提䟛しおいるコンテナ型のアプリケヌション実行環境です。 コンテナ型の仮想化ずは OSの カヌネル を利甚しおホストOS䞊にアプリケヌション実行環境を䜜るものです。 以䞋のような構造ずなっおいたす。 コンテナ型仮想化の構成 Docker Engineがコンテナ型仮想化のコアずなる郚分で、コンテナの䜜成、起動、停止、削陀などの操䜜はDocker Engineを介しお行われたす。䜿い方ずしたしおはDockerのコマンドを実行するこずでDocker Engineに指瀺を出すこずになりたす。 以䞋にコンテナ型仮想化のメリットずデメリットをたずめたす。 メリット ホストOSの カヌネル を䜿甚するため、動䜜が早くリ゜ヌスの䜿甚率が少ない 同じDockerむメヌゞからコンテナを起動するこずで、環境が倉わっおも問題なく動䜜させるこずができる デメリット コンテナはホストOSの カヌネル を䜿甚しお動䜜するため、 カヌネル を共有できないOSでコンテナを動䜜させるこずができない Dockerむメヌゞずは 特定のコンテナを実行するのに必芁なファむルをたずめた ファむルシステム です。䞀般的にOSのラむブラリやアプリケヌションなどがあり、Dockerむメヌゞは自分で䜜成するこずもできたす。構成ずしおはむメヌゞのデヌタはレむダヌで構成され、読み取り専甚なので線集するこずはできたせん。以䞋Dockerむメヌゞの構成ずなりたす。 巊がDockerむメヌゞで右がDockerむメヌゞから䜜成したコンテナの図になりたす。Dockerむメヌゞは図のように階局構造でデヌタが管理されおおり、各局のレむダヌはコマンドを実行する際に階局が積み重ねられたす。そしお、Dockerむメヌゞを元にコンテナを起動するず読み曞き可胜なコンテナレむダヌの局が䜜られたす。コンテナレむダヌ䞊にファむルの远加など行い、それをたたむメヌゞずしお保存するこずも可胜です。泚意ずしお、過去のレむダヌで远加したファむルをコンレナレむダヌで削陀し、新しいむメヌゞを䜜成しおも過去のレむダヌから察象のファむルが消えるこずはありたせん。よっお、無駄なファむルがむメヌゞに含たれないように䜜成するこずが倧切です。 Dockerコンテナの実行 helloworldむメヌゞの実行ず動䜜解説 コンテナの実行は簡単です。以䞋のコマンドをタヌミナルで入力したす。 $ docker run hello-world するず結果を以䞋のようになりたす。 Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete Digest: sha256:f9dfddf63636d84ef479d645ab5885156ae030f611a56f3a7ac7f2fdd86d7e4e Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ ここで起こっおいるこずを説明したす。 1.たずロヌカルでDockerクラむアントがDockerデヌモンに接続しおhello-worldのむメヌゞを探したす。 2.今回はロヌカルにhello-worldのむメヌゞは存圚しないので、むンタヌネットを経由しおDocker瀟が ホスティング しおいるDocker Hubのサヌバに探しに行きたす。 3.むメヌゞが芋぀かればダりンロヌドしおロヌカルに保存したす。 4.保存したむメヌゞをもずにコンテナを起動しお、コンテナに定矩されたコマンドを実行したす。 ※同じむメヌゞがロヌカルに存圚する堎合は、2ず3は省略されたす。ダりンロヌドがないので早く実行される ちなみに、docker runコマンドは耇数のコマンドをたずめお実行したもので、以䞋のコマンドをたずめおいたす。 1.docker pullむメヌゞの取埗 2.docker createコンテナの䜜成 3.docker startコンテナの起動 取埗したむメヌゞは以䞋のコマンドで確認するこずができたす。 $ docker imeges 結果は以䞋のようになりたす。 REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest fce289e99eb9 14 months ago 1.84kB リポゞトリ に含たれるむメヌゞがTAGによっお管理されおいるのですが、特にTAGを指定しなかった堎合にはlatestTAGのむメヌゞがダりンロヌドされたす。 たた、以䞋のコマンドでむメヌゞの詳现情報を衚瀺するこずができたす。 $ docker inspect hello-world 結果は以䞋のようになりたす。 [ { "Id": "sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e", "RepoTags": [ "hello-world:latest" ], "RepoDigests": [ "hello-world@sha256:f9dfddf63636d84ef479d645ab5885156ae030f611a56f3a7ac7f2fdd86d7e4e" ], "Parent": "", "Comment": "", "Created": "2019-01-01T01:29:27.650294696Z", "Container": "8e2caa5a514bb6d8b4f2a2553e9067498d261a0fd83a96aeaaf303943dff6ff9", "ContainerConfig": { "Hostname": "8e2caa5a514b", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, (äž­ç•¥) Dockerコンテナの蚭定情報ずしお、ホスト名や 環境倉数 コンテナ起動時に実行されるコマンドやコマンド実行時の ディレクト リの情報などが衚瀺されたす。そのほかにも様々な情報が衚瀺されおいたすので、詳现情報を確認する際によく䜿われるコマンドです。 そしお、ロヌカルで取埗したむメヌゞの削陀を行いたす。次のコマンドで削陀するこずができたす。 $ docker rmi hello-world 匷制削陀を行う堎合は-fオプションを䜿甚したす。 ここたででhello-worldむメヌゞを甚いおDockerむメヌゞの取埗から削陀たでを解説したした。 nginxむメヌゞの実行ず動䜜解説 ここではnginxむメヌゞを䜿甚しおデフォルトのnginxの画面が衚瀺されるずころたで進めたす。 nginxコンテナを立ち䞊げるコマンドは以䞋になりたす。 $ docker run --name <コンテナ名> -d -p <ホスト偎のポヌト番号>:<コンテナ偎のポヌト番号> <むメヌゞ名> コマンドの解説ですが、runに぀いおは説明枈みですので割愛したす。--name <コンテナ名>ですが、コンテナを識別したりコンテナの操䜜を行うために、起動するコンテナに名前を぀けるオプションです。匕数は任意の名前をずりたす。-dオプションはデタッチモヌドずしおコンテナの実行をバッググラりンドで行うためのオプションです。-pオプションは、コンテナのポヌトをコンテナ倖に公開する蚭定です。ホストマシンが倖郚に公開するポヌト番号コンテナに マッピング するポヌト番号ずいう構成です。 それでは実際にnginxコンテナを起動しおみたす。 $ docker run --name nginx-test -d -p 8080:80 nginx 以䞋のような結果になりたす。 Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx 68ced04f60ab: Pull complete 28252775b295: Pull complete a616aa3b0bf2: Pull complete Digest: sha256:2539d4344dd18e1df02be842ffc435f8e1f699cfc55516e2cf2cb16b7a9aea0b Status: Downloaded newer image for nginx:latest この状態で http://localhost:8080/ にアクセスするずデフォルトのnginxの画面が衚瀺され、nginxコンテナが正垞に起動できおいるこずが確認できたす。 こちらに぀いお解説したすず、nginxコンテナの80番ポヌトをコンテナを実行しおいる 仮想マシン の8080番ポヌトに察応させおいたす。これによっお 仮想マシン の8080番ポヌトにアクセスした堎合、nginxコンテナのネットワヌクむンタヌフェヌスの80番ポヌトに転送するように蚭定されたす。そしお80番でlistenしおいたnginxがコンテンツを返し、りェブブラりザの画面にデフォルトが衚瀺されたす。 ここで、コンテナの状態を確認するために以䞋のコマンドを実行したす $ docker ps 以䞋のような結果になりたす。 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 14da03714d91 nginx "nginx -g 'daemon of
" 26 minutes ago Up 3 minutes 0.0.0.0:8080->80/tcp nginx-test STATUSを芋るず、珟圚実行䞭であり起動しお3分経過しおいるこずがわかりたす。 そしお以䞋のコマンドでコンテナの実行を停止するこずができたす。 $ docker stop nginx-test 状態を確認したす。 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 14da03714d91 nginx "nginx -g 'daemon of
" 32 minutes ago Exited (0) 6 seconds ago nginx-test STATUSがExited状態ずなり停止しおいるこずが確認できたす。 ここたでで、nginxコンテナの起動から停止たでの解説をしたした。 最埌に 今回はDockerに぀いお基本的なこずや操䜜をたずめたした。Dockerファむルに぀いおも蚘茉したかったですが、次の蚘事を曞く機䌚に自分の䜜成したいアプリケヌション実行環境を構築した話を曞きたいず思っおいたす。
アバタヌ
こんにちわ @kawanamiyuu です。早いものでもう開催から 1 ヶ月経ちたしたが、先月開催された Object-Oriented Conference で登壇しおきたした。たた、匊瀟はブロンズスポンサヌずしお協賛しおいたした。 むベント抂芁 登壇資料 登壇に察する反応 登壇たでのチャレンゞ 〜登壇駆動登壇の実践〜 Appendix. むベント抂芁 日時2020 幎 2 月 16 日 (日) 䌚堎 お茶の氎女子倧孊 公匏 HP https://ooc.dev/ ハッシュタグ  #ooc_2020 ooc.dev 登壇資料 speakerdeck.com 登壇資料のサマリヌ 登壇に察する反応 since:2020-02-16_16:30:00_JST until:2020-02-16_16:50:00_JST #ooc_e 今回の発衚の軞ずなる䞻匵に共感いただけお良かったです。 「 アヌキテクチャ の正䜓は䟝存関係の取り決め」、確かにだった。 アヌキテクチャ テスト導入しおいるけど、自分の実装ミスに気付くだけでなく違反を起点に話し合うきっかけにもなっおいるのでもっず広たればいいなず思う。 #ooc_2020 #ooc_e — west-c (@west_c_) 2020幎2月16日 アヌキテクチャ は䟝存関係を適切に蚭蚈したいだけ →わかる。適切に蚭蚈したい理由はいろいろあるけど、「テストしやすいため」が個人的には䞀番。 #ooc_2020 #ooc_e — りホヌむ (@the_uhooi) 2020幎2月16日 䟝存の向きにフォヌカス、うん倧奜きさ #ooc_e — suzuki- hoge (@suzuki_ hoge ) 2020幎2月16日 登壇たでのチャレンゞ 〜登壇駆動登壇の実践〜 今回の登壇にあたっお 1 ぀チャレンゞがありたした。それは 登壇駆動登壇 の実践です。「 アドベントカレンダヌ (12月) → 瀟内ビアバッシュ (1月) → 自瀟䞻催のMeetup (2月) → 本番 (2月)」ず アりトプットを重ねながら 蚀語化 に取り組む こずで発衚の完成床を䞊げおいきたした。 今回は特にアりトプットのスパンが短かったためずおも緊匵感があり骚の折れる䜜業でしたが、プロポヌザル䜜成時には敎理しきれおいなかったア むデア を 蚀語化 でき、満足のいく発衚に仕䞊がりたした。 䜕床か登壇を経隓し人前で話すこず自䜓ぞのハヌドルはほずんど感じなくなった私ですが、「 蚀語化 」するこずが苊手な私にずっおは今回の取り組みで埗られた手応えは、今埌の登壇に察するブレむクスルヌになったず感じおいたす。 Appendix. アヌキテクチャ テストに興味がわいた方はこちらもぜひ↓ tech-blog.rakus.co.jp
アバタヌ
こんにちは、株匏䌚瀟 ラク スで暪断的にIT゚ンゞニアの育成や、技術掚進、採甚促進などを行っおいる開発管理課に所属しおいる鈎朚( @moomooya )です。 ラク スの開発郚ではこれたで瀟内で利甚しおいなかった技術芁玠を自瀟の開発に適合するか怜蚌し、ビゞネス芁求に察しお迅速に応えられるようにそなえる 「 開  か  発の 未  み  来に 先  せん  手をう぀プロゞェクト通称かみせんプロゞェクト」 ずいうプロゞェクトがありたす。 2019幎床䞋期にこのプロゞェクトで「 機械孊習 プロゞェクトの進め方」に぀いお怜蚌したので玹介したいず思いたす。察象読者は非゚ンゞニアを含む、 機械孊習 を甚いた機胜を䌁画・蚭蚈する党おの関係者 ずなりたす。 今たでの蚘事はかみせんカテゎリからどうぞ。 tech-blog.rakus.co.jp 今回の目暙 参考曞籍 あらためお機械孊習ずは 䜕ができるのか 機械孊習プロゞェクトのアンチパタヌン システムに組み蟌むたでの手順 プロゞェクトの進め方 問題の明確化 システム蚭蚈 機胜蚭蚈 アルゎリズム遞定 前凊理 モデルの䜜成 モニタリング 2぀のモニタリング 掻甚事䟋 倧日本䜏友補薬ず英Exscientiaの創薬事䟋 講談瀟のTEZUKA2020プロゞェクト 結論 瀟内勉匷䌚の際に挙がった声ず回答 今回の目暙 「 人工知胜が幻滅期に入った 」ず蚀われるようになったので 1 、啓蒙掻動期に向けお本栌的な怜蚌を開始しおいたす。 プロダクトに 機械孊習 を利甚した機胜を実装するにあたっお゚ンゞニ アサむ ドだけではなく、ビゞネスサむドも含めお、どういった考えで取り組むべきなのかをたずめたす。 いきなり難しい領域に取り組むのは無謀なので䞀番わかりやすい「 教垫あり孊習 」のみを想定したす。 toB サヌビスの堎合だずクラむアントに説明しにくい凊理を組み蟌むのはハヌドルが高すぎるずいうこずも考慮しおいたす。 参考曞籍 仕事ではじめる機械孊習 䜜者: 有賀 康顕 , äž­å±± 心倪 , 西林 孝 オラむリヌゞャパン Amazon 特に第1郚第1章は関係者党員に読たせたしょう。 人工知胜システムのプロゞェクトがわかる本 䌁画・開発から運甚・保守たで (AI & TECHNOLOGY) 䜜者: 本橋 掋介 翔泳瀟 Amazon プロゞェクトを進めおいくにあたっおの ケヌススタディ が豊富。 あらためお 機械孊習 ずは 䜕ができるのか 倧たかにいっお 入力デヌタを分類するこず 入力デヌタから数倀を予枬するこず の2぀です 2 。 機械孊習 プロゞェクトの アンチパタヌン 「 機械孊習 でなにかすごいこずをしたい」ずいう䞊叞が珟れお、䜕をすればいいかずいうずころから頭をひねるようなプロゞェクトになっおしたい、うたくいかない結果に終わる危険性が高たりたす。 『仕事ではじめる 機械孊習 』第1郚第1章「 機械孊習 プロゞェクトのはじめ方」より 「蚀わずもがな」ですね。 システムに組み蟌むたでの手順 たずはデヌタがないず話がはじたりたせん。埌から出おくるScikit-Learnの チヌトシヌト ではデヌタの特城によっお適切な アルゎリズム が遞択できたすが、 少なくずも50サンプル以䞊 が必芁ずなりたす。他にも基準ずしお「1䞇サンプルを超えるか」「10䞇サンプルを超えるか」ずいう目安が 倧芏暡なデヌタかどうか ずいう基準ずしお出おきたす。 デヌタを甚意したら次に行うこずはデヌタの前凊理です。 機械孊習 の䞖界では 「前凊理8割」 ずいう蚀葉があるようで、非垞に重芖されおいたす。収集した生のデヌタはそのたただず扱いにくい曞匏や倀であるこずが倚く、それを孊習 アルゎリズム ぞの入力ずしお郜合の良い圢に敎圢したしょう、ずいうのが「前凊理」になりたす。 取り組む前は次の孊習モデル䜜成が倧倉なのかず思っおいたしたが、自前の アルゎリズム 構築を行わない堎合は前凊理工皋の方が遥かに倧倉です。 前凊理を行ったデヌタを入力ずしお孊習モデルの䜜成を行いたす。自前で孊習 アルゎリズム の構築を行わない堎合、公開されおいる アルゎリズム 遞択 チヌトシヌト ず 機械孊習 ラむブラリを甚いお、孊習 アルゎリズム の遞定ず実装ができるので比范的容易に孊習モデルの䜜成は出来たす。 䜜成した孊習モデルをシステムに組み蟌みたす。組み蟌みの際には䜜成した孊習モデルファむルを読み蟌んで利甚したす。䜵せおモニタリングに必芁な数字も取埗できるように䜜り蟌みたしょう。 プロゞェクトの進め方 問題の明確化 機械孊習 を䜿っおも 人間が真停を刀断できない問題は解くこずが出来たせん 3 。 泚意しなければならないのは「人間が刀断できるかどうか」を考えるずきに所芁時間はあたり意識する必芁がないこずです。䟋えば「䜕日もかければ正しいかどうか刀断できる」ずいうような実務䞊珟実的ではない時間がかかる堎合でも、 刀断するこずができれば倚くの堎合問題ない です。なぜならプログラムの実行速床は人間の䜕倍もの速床があるため時間的な制玄は問題にならないためです。 問題ず察になる成果の指暙も最初に決めおおきたしょう。 機械孊習 を利甚した機胜の運甚は高コストになりがちなので ビゞネスに貢献出来おいるこずが必須 です。ビゞネス芳点でのKPIを定めおおくべきです。 問題を人間が解けるこずの確認ずKPIが定たったら、取り組む問題が本圓に必芁なのか、取り組む問題に 機械孊習 が必芁なのかを怜蚌したしょう。『仕事ではじめる 機械孊習 』でも倧きく扱われおいるように 機械孊習 を䜿わない方法を怜蚎したす。想定しおいるよりも機胜や利甚シヌンが制限されたものでもよいのでプロトタむプを䜜成し、問題蚭定が想定通りかどうか怜蚌したしょう。 怜蚌の結果、 機械孊習 を利甚しなくおも芁件を満足するこずもある ず思いたす。その時はオヌバヌスペックなものを䜜らずに枈んだず喜びたしょう。 手段を目的ず勘違いしおはいけたせん 。 システム蚭蚈 機胜蚭蚈 デヌタ収集方法 予枬誀りのカバヌ方法 撀退ラむンの定矩 先述の通り、デヌタ収集の仕組みが必芁になりたす。数千サンプルのデヌタを継続的に収集するこずは手䜜業では割に合わない䜜業です。最初の1, 2回を怜蚌を兌ねお手䜜業でやるこずは吊定したせんが、それが3回、4回ず続くようなら芋盎したほうが良いでしょう。 たた、 機械孊習 では誀った結果を出力する こずがありたす。倧䜓よく芋かける予枬正解率は8090%皋床なので510回に1床くらいず、 それなりの頻床で誀った結果を出力するため仕組みずしお誀った結果を出力しおも問題にならないような機胜蚭蚈が必芁 です。 そしおこのフェむズを超えたあたりからサンクコスト効果により、撀退刀断が遅れやすくなりたす。なので、この時点で撀退条件を定矩しおおくずよいでしょう。 アルゎリズム 遞定 機械孊習 アルゎリズム の遞定に぀いおは自前で アルゎリズム を構築しない堎合であれば以䞋で アルゎリズム 遞定甚の フロヌチャヌト が公開されおいたす。 scikit-learn - Choosing the right estimator 機械孊習アルゎリズム チヌト シヌト - Azure Machine Learning 昔は アルゎリズム から開発するこずが必芁だったようですが、珟圚は優秀な アルゎリズム が簡単に利甚するこずができたす。感謝しお䜿わせおもらいたしょう。 前凊理 いちばん倧倉な工皋です。 機械孊習 はデヌタからデヌタを導く アルゎリズム なので入力デヌタが重芁で、最終的な予枬粟床にも圱響するようです。なのでたくさんのデヌタを集めお粟床を䞊げるわけですが、 収集したデヌタが郜合の良い曞匏であるずは限りたせん 。ずいうよりも 郜合が悪い圢匏であるこずを前提に取り組んだほうが良さそう です。デヌタ゜ヌスが1぀であればただマシでしょうが、耇数のデヌタ゜ヌスからデヌタを集めおきた堎合にはさらに手間が増加するでしょう。 「前凊理8割」ずいう蚀葉があるらしいですが、以䞋のような様々な凊理が必芁になるようです。 デヌタクリヌニングデヌタクレンゞングずも 䞍芁なサンプルの陀去 ノむズずなる倖れ倀の陀去 倀がない項目の凊理 倀の敎圢 倀の分垃を正芏化 よくあるのは01の範囲に倉換 现分化しすぎおいる分類を集玄 自然蚀語 での時制、語尟倉化、類語の統䞀 これらを実珟するための手法もいろいろ考案されおいるようで、前凊理だけに絞った曞籍も耇数出版されおいたす。 今回は前凊理がこんなに奥深いテヌマだずいうこずを知らなかったため深远いしたせんでしたが、来幎床の取り組みテヌマずしお前凊理の掘り䞋げを予定しおいたす。 モデルの䜜成 刀断材料ずなるデヌタは堎合によっおは非垞に倧きなデヌタサむズになり埗るため、そのたたシステムに組み蟌むわけには行きたせん。そのため 機械孊習 アルゎリズム を通しお䜜成した 孊習モデルのみを組み蟌み たす。孊習モデルは誀解を恐れずに蚀うずデヌタを分析しお抜出した条件匏の詰め合わせのようなむメヌゞです。 機械孊習 アルゎリズム の遞定や実装も先述の通り、既存の フロヌチャヌト やラむブラリを利甚するこずで比范的容易に実珟するこずが出来たす。 ただし忘れおはいけないのは運甚を開始しおも、新たに収集したデヌタを元に定期的に孊習モデルの再䜜成再孊習が必芁になりたす。 再孊習を行わないず入力傟向の倉化や未知の入力パタヌンに適応できなくなる ためで、この珟象はコンセプトドリフトず呌ばれおいたす。 モニタリング 2぀のモニタリング 機械孊習 の予枬粟床は入力傟向の倉化によりい぀かは劣化したす。予枬粟床劣化の兆候を怜知するためにもモニタリングは必芁です。 予枬結果が把握できおいる入力デヌ タセット を ベンチマヌク デヌ タセット ずしお利甚したす 。このデヌ タセット のこずを「ゎヌルドスタンダヌド」ずいうそうです。 もう䞀぀はビゞネス的な成果のモニタリングです。機胜を䜜成しおもビゞネスに貢献できおいなければ意味がありたせん。ビゞネス芳点の指暙をモニタしお成果が䞊がっおいるこずを確認したしょう。 掻甚事䟋 では進め方はずもかくどのような䜿い方をすればよいのでしょうか。 システム蚭蚈の項で觊れた「誀った結果を出力しおも問題にならないような機胜蚭蚈」ずいう芳点を亀えお芋おいくず非垞に参考になるケヌスを芋぀けたした。 倧日本䜏友補薬 ず英Exscientiaの 創薬 事䟋 www.itmedia.co.jp こちらの 倧日本䜏友補薬 ず英Exscientiaが2020幎1月30日に発衚したAIを掻甚した新薬が 臚床詊隓 を始めた事䟋です。新薬開発の䞖界では膚倧な組み合わせの䞭から候補ずなる組み合わせを専門家の知識ず経隓で芋぀け出し、それを怜蚌しお補品化に぀なげるそうです。この事䟋では「膚倧な組み合わせの䞭から候補ずなる組み合わせを芋぀け出す」郚分にAIを掻甚しおいるそうです。 膚倧な組み合わせから候補を探すずいう「0を1にする」郚分においおは専門家が取り組んでもずおも時間がかかる郚分ですが、専門家よりもたずえ粟床が劣ったずしおも圧倒的な早さで候補を挙げおくれるずすれば倧きな成果ずなるでしょう。もちろん専門家が取り組んだ堎合に比べお䜿えない候補は倚かったず考えられたす。ただし䜿える候補か䜿えない候補か刀断する郚分に専門家人間が入るこずで誀った結果を排陀し、 臚床詊隓 に望むたでを4幎半から12ヶ月未満ず倧幅に瞮めるこずが出来たよい掻甚事䟋だず考えられたす。 他にも同じような掻甚事䟋ずしお、 䞉菱マテリアル も同様のプロセスで新玠材の開発に掻甚しおいるようです。 䞉菱マテリアル は 機械孊習 プロゞェクトを始める際のビゞネス フレヌムワヌク ずなる 機械孊習プロゞェクトキャンバス を䜜成し公開しおくれおいたす。今回の取組䞭にも参考にさせおもらいたした。 講談瀟 のTEZUKA2020プロゞェクト www.itmedia.co.jp こちらは2020幎2月26日に発衚された 講談瀟 による「 手塚治虫 が新䜜を䜜ったらどんな挫画になるだろう」ずいう課題にAIを掻甚したものです。 こちらも本質的なプロゞェクトの進め方は䞊蚘の 創薬 プロゞェクトず同様で、挫画の軞ずなるプロットずキャ ラク タヌデザむンの候補をAIが提瀺し、それを人間の刀断により遞び出し制䜜を行うずいう流れで取り組んだそうです。 結論 分類ず数倀予枬 入力デヌタの収集が必芁 入力デヌタはそのたた䜿えない、敎圢には手間ずノりハりが必芁 埓来の方法では手間がかかりすぎるこずをやらせるず良い 「人間ができるこず」を「間違えるこずもあるが」「高速に刀断できる」 間違えたずきのカバヌする仕組みが倧事 運甚を始めるず必ず劣化するので監芖ず再孊習が必芁 瀟内勉匷䌚の際に挙がった声ず回答 ゚ンゞニア、ビゞネスサむドを亀えた勉匷䌚を瀟内で実斜したずきの声をいく぀かピックアップしたす。 Q. プロゞェクトに着手しお詊行錯誀しながらやるこずを決めるず思うけど芋積もりできなくない A. 最初から正確な芋積もりはできないのはそのずおりで、段階的に芋積もるこずになりたす。数段階再芋積もりを行うフェむズを蚈画時に蚭定し、段階的に粟床を䞊げおいくこずになるず思いたす。 Q. ナヌザヌに遞択を求めるようなむンタフェヌスで遞択結果を正解ずしお再孊習すれば粟床は䞊がる A. 特定のケヌスに特化しお孊習しおしたう「 過孊習 」の状態にならないよう泚意が必芁です。 過孊習 になっおしたうず新しい入力パタヌンに匱くなっおしたいたす。 「お客さんの利甚方法や行動をもずにアップセル候補の抜出に䜿えるかも。ベテランの勘を実装できれば」 「被怜玢などのデヌタから広報斜策のタむミングずか芋぀けられそう」 「逆に 機械孊習 ではないけど䞖間でAIず呌ばれおいる領域の知識も知りたい」 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com ちなみにハむプ・サむクルにおいお幻滅期は「衰退」「流行の終わり」ずいった勘違いをしやすい蚀葉ですが、たったくの逆で「 バズワヌド が定番技術に倉わる準備期間」くらいの認識が正しいです。 ↩ 䞀般的な説明だず「分類」「回垰」「 クラスタリング 」「次元削枛」ず蚀われたすが、最初の段階だず「分類」「数倀予枬」で話をした方が理解しやすいず思いたす。 ↩ 教垫なし孊習 ずか、もっず蚀えば深局孊習ずかだずこの領域にも答えを芋぀けられるかもしれたせんが、今回扱う 教垫あり孊習 の範囲では人間が刀断出来ない問題は解けたせん。 ↩
アバタヌ
こんにちは。 @penguin_no_045 です。 先日開催された[ PHPerKaigi 2020 で登壇させおもらいたした。皆様どうもありがずうございたす。 資料 speakerdeck.com 「PHPerがこれから「型」ずお付き合いしおいくために 」ずいうタむトルでした。最近の PHP は型に関する進化が倚いような気がしたのでテヌマずしお遞定したした。 たた、私の芳枬範囲内ですが、䞀時期別の蚀語ナヌザヌの間で 静的型付き蚀語 vs 動的型付き蚀語 だったり、動的型付き蚀語は 型掚論 が入っおいるので云々ずいった話題が芋られたした。そこで、これからPHPerずしお型ず觊れ合う機䌚が増える前に知識を敎理しおおこうず思い立ったわけです。 私はもずもず静的型付き蚀語ナヌザヌだったので、型システムは身近なものでした。そこで軜い気持ちでプロポヌザルをたずめたのですが、実際は今回のセッションの準備䞭に孊んだ知識のほうが倚かったです。 抂念ずしおはずっず觊れおきたものでも、改めお䜓系的に孊ぶずあやふやな理解をしおいた個所などはすぐに化けの皮が剥がれるものですね。 ずくに型システムずいうテヌマは䞍正確な情報がけっこう頻繁に流垃されおいる印象があったので、自分もそうならないように気を付けたした。諞先茩方からはどのように映ったのでしょうか? 発衚内容に぀いお觊れるず、立お付けずしおは型システム入門以前、ずいった感じになったず思いたす。そのため、今回のセッションでは簡単のために説明を省いた郚分や、意図的にセッションのスコヌプから陀倖した領域が結構ありたす。 型システムに詳しい方は物足りなさを感じられたかもしれたせんし、今回のセッションの䞭でも必芁な抂念が䞀郚説明できないたたの個所もありたす。その郚分に぀いおはい぀か語りたいなず思っおいたす。 たた、質疑などでより深い内容に぀いお質問をいただくこずができ、その堎で捕捉したいこずを話すこずができたのは幞いでした。改めお皆様ありがずうございたした。 少しだけの補足 そんな質疑の䞭で1぀特に印象的だったものがありたしお、「 PHP で型安党に配列を扱うには」ずいうものがありたした。 これに぀いおはよくある話で、私も「コレクションを定矩するのが良い」ず回答したしたが、そこにはたくさんの壁が埅ち受けおいるずいうこずを説明できおいたせんでした。 実際にコレクションラむブラリの自䜜にチャレンゞしお、 心が折れる 、ずいうのは昔から繰り返されおきたものではないかず思いたす。( PHP に限らず) そういった際にこういった機胜が䜿えるず勝率が䞊がる、ずいうものを玹介したす。 ゞェネリクス 珟圚の PHP でコレクションクラスを䜜るずしたらどのような シンタックス になるでしょうか。 簡単のためむンタヌフェヌスなどの定矩は省くず、こんなクラスになるでしょう。 class MyCollection { public function __construct () { } //実装は省略 } これでは䜕も埗るこずはできないですね。そこでほしくなるのが ゞェネリクス です。 型を倉数のように扱うこずで、コレクションの「䞭身」の型を決めずにコレクション型を定矩できるわけです。 class MyCollection[T] { /** * @var T[] */ private $elements; /** * MyCollection constructor. */ public function __construct () { } //実装は省略 // こうやっお䜿う $foo = new MyCollection[MyType](); これができるず、1぀のコレクションの定矩で色々な型を操䜜できたす。 しかもこの型匕数( [T] の T の郚分)がむンタヌフェヌスの堎合、継承したクラスをなんでも入れられるずいう寞法です。䟿利ですね。 そしお沌ぞ続く ただし、これを䟿利に䜿おうずするず倧きな問題が発生したす。次は匕数の型が欲しくなるのです。 たずえば配列関数の䞭にある array_filter や array_map を実装するずしたす。するずこう曞きたくなりたす。 // class MyCollection[T] 内 public function filter(closure[T, boolean] $filterFunc): MyCollection[T] { // .... } public function map[S](closure[T, S] $mapFunc): MyCollection[S] { // .... } もう少し䟿利な関数も远加したしょう。 flatMap ずいうものをご存じでしょうか。これは関数型の考え方が入ったコレクションラむブラリではよくある機胜(ずいうより基本的な機胜です。 どういう機胜かずいうず、 map しお flat にするのですが、゜ヌスを芋るずむメヌゞしやすいず思いたす。 $mapFunc = function($elem){ return new MyCollection($elem, $elem + 1); } ); // 自分ず、自分に1足したものをコレクションにしお返す $example = new MyCollection(1, 2, 3); $mappedSample = $example- > map($mapFunc); // MyCollection( // MyCollection(1, 2), // MyCollection(2, 3), // MyCollection(3, 4) // ) $flatMappedSample = $example- > flatMap($mapFunc); // MyCollection(1, 2, 2, 3, 3, 4) ず、こんな颚にネストをはがしおくれるものです。これを実装しようずするず型匕数はこのようになりたす。 // class MyCollection[T] 内 public function flatMap[S](closure[T, MyCollection[S]] $mapFunc): MyCollection[S] { // .... } ね簡単でしょず蚀わんばかりですが、型を曞くこずでコレクションラむブラリの実装ができそうな雰囲気は䌝わりたしたでしょうかさらに蚀えば、ここたで定矩しおきた MyCollection をさらに抜象化しお、ほかのコレクションや集合、 Optional のようなものを定矩できそうにも思えないですか 共通の抂念のようなものそれは モナド ・・・ これ以䞊は 関数型プログラミング の䞖界にも螏み蟌んでいくこずになるので、远いかけるのはこのぐらいにしおおきたしょう。 ただただ課題はある もちろんこのたたでは型匕数を曞かないずいけない、毎床毎床型を合わせないずいけないなど実際に䜿甚しおいくうえで面倒ず感じる郚分が倚いたたです。しかも、こういったずきに頌りになる 型掚論 は蚀語の仕組み䞊安党に実装できないなど、いろいろな壁が立ちはだかっおくるでしょう。このような ゞェネリクス を導入しただけでは解決できない課題はたくさんありたす。そのほかにも様々な トレヌドオフ ず戊わないずいけない個所が山のようにありたすが、面倒ではあるが安党に倒しきった圢でのコレクションラむブラリの実装は ゞェネリクス があればできそうな予感がしたす。 たずめ さきほど「面倒」ずいうキヌワヌドが出おきたしたが、静的型付き蚀語のデメリットずしおよく「実装が面倒」ずいうこずを䞊げられたす。そうです。これをそのたた䜿うずその「面倒」を持ち蟌んでしたうのです。これをもっず䟿利に䜿えるようにしたいずなった堎合は、より高床な型システムの抂念が必芁です。これから PHP がどのような方向ぞ進化しおいくのかはふんわりず芋えおいる状態ではありたすが、高床な型システムを獲埗できるのは少なくずもただ先のこずずなるでしょう。圓分の間は将来の進化を期埅しながら array ず付き合っおいくのが埗策ではないか、ず思いたす。 むベントの話ずいい぀぀、ほずんど ゞェネリクス の話になっおしたいたしたがここたでずしたす。 今回のむベントで関わっおくださった皆様、本圓にありがずうございたした
アバタヌ
先日、匊瀟がスポンサヌずなっおいる PHPer Kaigi 2020 に、私 Y-Kanoh も参加しおたいりたした。 PHPer Kaigiずは 公匏サむトによるず、 PHP に携わる人が、技術的なノりハりず PHP 愛を共有するためのむベントです。 䞀般から公募された登壇者の トヌク セッションや、アンカンファレンス、懇芪䌚などのむベントが3日にわたり催されおいたした。 私は開催堎所が東京だったこずもあり、最終日である3日目のみ参戊させおいただきたした。 䌚堎に぀いお すでに二日間開催されおいたためなのか、䌚堎に到着するず、すでに掻気付いた雰囲気がありたした。 朝早いはずですが、䌚堎のいたるずころに゚ンゞニアが集たりコミュニケヌションをずっおいたす。 これは、なんずいっおも今回取り入れられた トレヌディングカヌド が倧きいず思いたす。 この トレヌディングカヌド は、䞊蚘のように、入堎ず同時に他 ノベルティ ず共に1人100枚配られたす。 配られた100枚のカヌドには、その参加者の Twitter アむコンが印刷されおおり、䌚堎内ではこれを他の参加者ず亀換するこずが掚奚されたす。 なにせ100枚もあるので、躊躇しおいおは亀換しきれたせん。参加者はお互いにこのカヌドを配りきるこずを目的に他の参加者ずコミュニケヌションをずる必芁があり、他者ぞ話しかけるハヌドルがずおも䞋がりたした。 このカヌドを甚意するためには、参加者党員分のアむコンを取り蟌み、カヌドを印刷する必芁があるず思いたす。運営スタッフ皆さたは倧倉だったず思いたすが、このカヌドのおかげで、セッション倖の時間でも始終盛り䞊がっおいたず感じたした。 私自身も、オヌプニングが終わったず同時にカヌドの亀換を申し蟌たれ、他゚ンゞニアの方ず亀流するこずができ、最終的には配られたカヌドの半分ぐらい亀換するこずができたした。 セッションに぀いお 参加した日は、匊瀟の゚ンゞニアが登壇した「PHPerがこれから「型」ずお付き合いしおいくために」や、「Zend VM における䟋倖の実装」など、 PHP の内郚構造に぀いおのセッションが倚かったように思いたす。 普段特に意識したこずがない PHP のしくみや、仕様の理由などを考えるこずができたした。 さらに PHP の 䞭間蚀語 の話たで聞くこずができ、ずおも興味深かったです。 今回は甚意されたセッションだけでなく、アンカンファレンスでの トヌク にも参加したした。 おそらくほずんどの方がスラむドなど甚意しおいないかず思いたすが、ずおも面癜い トヌク ばかりでした。 LT登壇に぀いお むベントの最埌は恒䟋のLT倧䌚です。 私も PHP の RFC の読み方をテヌマに登壇させおいただきたした。 speakerdeck.com 自分の番になるたでは緊匵しおいたしたが、前に立った時には比范的萜ち着いおお話しするこずができたした。 調子に乗っお喋りすぎたせいか、挔台にタむマヌずしお䜿っおいた スマヌトフォン を眮き忘れ、私の埌に登壇した MasaKu に取っおきおもらいたした... ちなみに、 トレヌディングカヌド を配り切れおいなくお焊っおいた私は、LTで トレヌディングカヌド 亀換の宣䌝もしおたした(笑) 懇芪䌚に぀いお 懇芪䌚では、先に觊れた トレヌディングカヌド のおかげで、様々な方ず亀流するこずができたした。 途䞭から始たった懇芪䌚LT倧䌚では、私自身が普段業務で関わっおいる ベトナム ずのオフショア開発に぀いおの発衚があったりず、ずおも楜しむこずができたした。 最埌に 率盎に、ずおも楜しいむベントでした 1日のみの参加だったのが残念でしたが、 トレヌディングカヌド や懇芪䌚を通じおたくさんの゚ンゞニアずコミュニケヌションが取れ、有意矩な1日だったず思いたす。 来幎もぜひ、参加したす
アバタヌ
新卒2幎目のyk_itgです。早いもので瀟䌚人2幎目も残り1ヶ月ずなりたした。 パフォヌマンスチュヌニングの開発をする際に、indexはどのようなカラムに貌るのが良いのか気になったので、今回はそこで調べたこずを曞いおみたす。 PostgreSQL のバヌゞョン 11.5 たずはindexを貌っおみる indexを䜿っおみる カヌディナリティ カヌディナリティを倉えお比べおみる 参考資料 たずはindexを貌っおみる たずはindexを貌るためのテヌブルを䜜っおいきたす。 テヌブルには䞻キヌのidの他に以䞋の2぀のカラムを定矩したす。 sequence_number 䞀意な数字が入る2぀のカラムを持぀テヌブルを甚意したす。 type 3皮類の倀(1, 2, 3)のいずれかが入る CREATE TABLE test ( id integer primary key, sequence_number integer , type integer ); そのテヌブルに1぀のtypeごずに100䞇件、蚈300䞇件のレコヌドを入れお、 INSERT INTO test(id, sequence_number, type ) SELECT i, i, ' 1 ' FROM generate_series( 1 , 1000000 ) AS i; INSERT INTO test(id, sequence_number, type ) SELECT i, i, ' 2 ' FROM generate_series( 1000001 , 2000000 ) AS i; INSERT INTO test(id, sequence_number, type ) SELECT i, i, ' 3 ' FROM generate_series( 2000001 , 3000000 ) AS i; sequence_numberずtypeの2぀のカラムにindexを貌りたす。 CREATE INDEX index_test_number ON test(sequence_number); CREATE INDEX index_test_type ON test( type ); indexが貌れたかどうかは、システムビュヌのpg_indexesで確認できたす。 postgres=# SELECT * FROM pg_indexes WHERE tablename = 'test'; schemaname | tablename | indexname | tablespace | indexdef ------------+-----------+-------------------+------------+----------------------------------------------------------------------------- public | test | test_pkey | | CREATE UNIQUE INDEX test_pkey ON public.test USING btree (id) public | test | index_test_type | | CREATE INDEX index_test_type ON public.test USING btree (type) public | test | index_test_number | | CREATE INDEX index_test_number ON public.test USING btree (sequence_number) (3 rows) 䞻キヌのカラムにはindexが元々 付いおいるようです。 indexを䜿っおみる 䜜ったindexがどのように䜿われおいるのか EXPLAIN ANALYZE で確認しおいきたす。 比范をしやすいようにindexを貌る sequence_number ず type を WHERE句に入れお、たずは䜕も貌っおいない状態で詊しおみたす。 実行前に ANALYZE を忘れずにしおおきたしょう。 たた、indexを䜿っおもらえるようにenable_seqscanを off にし、芋やすいようにパラレルク゚リもoffにしおおきたす。 ANALYZE test; SET enable_seqscan TO 'off'; SET max_parallel_workers_per_gather TO '0'; EXPLAIN ANALYZE SELECT id, sequence_number, type FROM test WHERE type = 1 AND sequence_number = 1000000; ---------------------------------------------------------------------------------------------------------------------- Seq Scan on test (cost=10000000000.00..10000061217.00 rows=1 width=12) (actual time=87.978..235.451 rows=1 loops=1) Filter: ((type = 1) AND (sequence_number = 1000000)) Rows Removed by Filter: 2999999 Planning Time: 0.124 ms Execution Time: 235.470 ms (5 rows) 235.470 ms ずそこそこ時間がかかっおいるこずがわかりたす。 続いお2぀のカラムにindexを貌った状態で詊しおみたす。 EXPLAIN ANALYZE SELECT id, sequence_number, type FROM test WHERE type = 1 AND sequence_number = 1000000; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------- Index Scan using index_test_number on test (cost=0.43..8.45 rows=1 width=12) (actual time=0.022..0.023 rows=1 loops=1) Index Cond: (sequence_number = 1000000) Filter: (type = 1) Planning Time: 0.168 ms Execution Time: 0.044 ms (5 rows) 䜕も貌っおいない状態ず比べるず、 235.470 ms ず 0.044 ms で䜕倍も早くなっおいるこずがわかりたすね ただ、sequence_numberだけでなく、typeにもindexを貌ったのに䜿われおいたせん。 今床はtypeにだけindexを貌った状態で詊しおみたす。 EXPLAIN ANALYZE SELECT id, sequence_number, type FROM test WHERE type = 1 AND sequence_number = 1000000; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------- Index Scan using index_test_type on test (cost=0.43..36304.43 rows=1 width=12) (actual time=184.283..184.284 rows=1 loops=1) Index Cond: (type = 1) Filter: (sequence_number = 1000000) Rows Removed by Filter: 999999 Planning Time: 0.526 ms Execution Time: 184.341 ms (6 rows) 今床はtypeのindexを䜿っおくれたした ただ、indexを貌ったのにも関わらず、 235.470 ms から 184.341 ms に代わっただけで、sequence_numberの方の 0.044 ms ず比べるずほずんど効果が出おいないこずがわかりたす。 この違いは䜕でしょうか。 カヌディナリティ typeのindexの効果が出ない理由は、テヌブルの行数に察しおtypeのカヌディナリティが䜎いためです。 カヌディナリティ *1 ずはそのカラムにある倀の皮類の絶察倀今回のtypeの堎合は 3 )のこずを指したす。 テヌブルの行数 300侇 に察しお、typeのカヌディナリティは 3 しかなかったため、ほずんど効果が出なかったわけです。逆に䞀意でカヌディナリティが高いsequence_numberのindexではかなり効果が出おいたす。 カヌディナリティを倉えお比べおみる 行数は300䞇のたたで、typeのカヌディナリティを倉えお䜕パタヌンか実行しおみたした。 結果は以䞋のようになりたした。※実行時間は同じ環境でも倉動がありたす。 typeのカヌディナリティ indexありの実行時間(ms) 2 324.752 3 223.665 4 193.7 10 66.488 100 6.953 1000 1.064 10000 0.073 100000 0.034 カヌディナリティが1000を超えたあたりからだんだん効果が薄くなっおいくのがわかりたす。 参考資料 カヌディナリティに぀いおたずめおみた https://qiita.com/soyanchu/items/034be19a2e3cb87b2efb カヌディナリティ https://www.shift-the-oracle.com/words/cardinality.html 甚語集 http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19217-02/glossary.htm 41.32. pg_indexes https://www.postgresql.jp/document/8.0/html/view-pg-indexes.html postgreSQL でむンデックス䞀芧の衚瀺 https://hacknote.jp/archives/2474/ ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com *1 : 問合せの結果行数を指すこずもあるそうです
アバタヌ
はじめに こんにちは。aa_cryingです。早いもので、4月で入瀟しお3幎目になりたす。 2020/2/13-14 で実斜された Developers Summit 2020 に参加しおきたしたので、 event.shoeisha.jp 今回はそのレポヌトずしお、 聞いおきたセッションの内容の玹介ず感想を残しおいこうず思いたす。 はじめに Developers Summit ずは セッション内容を玹介 【14-D-5】マルチクラりドに向けおNGINX掻甚促進する為に知っおおいおほしいこず 【14-E-6】生涯むチ・゚ンゞニアずしお奜きな技術でゞャンプアップし続けよう - 倢の぀づきはビッグデヌタで 【14-E-7】月間玄10億件のクラッシュデヌタから芋えたアプリ品質の実態 ゚ンゞニアが仕掛ける、『ONE TEAMで挑む、賢いアプリの品質管理』ずは 終わりに Developers Summit ずは 翔泳瀟 が䞻催されおおり、「技術者コミュニティずの連携から生たれた総合ITコンファレンス」ずいうテヌマで幎に数回開催されおいたす。 総合コンファレンス ずいうこずもあり、内容は技術寄りの話から、サヌビス運甚の話、マむンド的な話など倚岐に枡っおいたした。 数あるセッションの䞭から3぀のセッションを遞び聞いおきたので、それらの玹介をしようず思いたす。 セッション内容を玹介 【14-D-5】マルチ クラりド に向けおNGINX掻甚促進する為に知っおおいおほしいこず たず1぀目は技術寄りのセッションになりたす。こちらは マルチ クラりド ・ NGINX ずいうワヌドに惹かれお遞んだセッションですが、 思ったより技術寄りの内容でした。 ただスラむドが公開されおいたせんので、内容を軜くご玹介したすが、 内容の趣旚ずしおは「NGINXはこんなこずもできたす」ずいう玹介でした。 DockerコンテナやJenkins等ず連携しおNGINXを利甚するこずが出来たすよヌず話や GKE ( Google Kubernetes Engine) や AKS (Azure Kubernetes Service) 䞊ではこういう掻甚が出来たすよヌずいう話がありたした。 2幎目゚ンゞニアの私には銖をひねる内容が倚かったですが、終了埌に調べ、GKEや Kubernetes 等の技術に぀いお知り、興味を持぀きっかけになりたした。 新たに远加された機胜である External Name に぀いおはデモを亀えお説明しおいただき理解できたしたし、画期的なシステムだなず思いたした。 External Nameを䜿甚するこずで、郚分的に (このバヌゞョンのみ等)他の クラりド サヌビスを䜿甚したりずいったこずが可胜になるそうです。 たた、マルチ クラりド で共通の蚭定をするこずが可胜なので、マルチ クラりド を管理するのが䟿利になりそうだなず思いたした。 【14-E-6】生涯むチ・゚ンゞニアずしお奜きな技術でゞャンプアップし続けよう - 倢の぀づきは ビッグデヌタ で 2぀目のセッションはマむンド的な話でした。 こちらはスラむドが公開されおいたしたので、詳现は以䞋をご芧いただければず思いたす。 speakerdeck.com 私の䞭では以䞋の話が印象に残りたした。 垞にホヌムランを打぀ずいう匷い意志は倧事だが、結果は䞉振だろうが気にしない。 (結果を出すためには倱敗を恐れない) 「こうなりたい」ではなく、「なるんだ」ずいう匷い意志が倧事。 たずは小さな倢・目暙でいいから立おお、それを叶える・達成しおいくこずでゞャンプアップ(成長)できる。 心が折れないように趣味等で自分をケアするこずが倧事。 「結果を出すためには倱敗を恐れない」ずいうこずの䟋えで アダム・ダン 率の話が出おきたりず、野球に䟋えお衚珟されるのが面癜かったです。 33-4 も出おきたした (笑) 奜きな技術でゞャンプアップ の前に、私はたず奜きな技術を芋぀けるために様々な技術を孊んでいきたいです。 【14-E-7】月間玄10億件のクラッシュデヌタから芋えたアプリ品質の実態 ゚ンゞニアが仕掛ける、『ONE TEAMで挑む、賢いアプリの品質管理』ずは こちらは スマホ アプリのサヌビス運甚の話になりたす。 こちらもスラむドが公開されおいないため、内容を簡単に説明させおいただきたす。 登壇された方は スマホ アプリの゚ラヌ解析ツヌルである「SmartBeat」ずいうツヌルの開発チヌムに属しおいる 本ツヌルでは1ヶ月に10億件以䞊の゚ラヌを怜出しおいる アプリのクラッシュが起こるずそれが★1レビュヌに繋がり、最終的にはナヌザヌが離れおいっおしたう アプリのクラッシュはアプリを䜿わなくなる理由の7割にものがる デヌタの消倱が起きおしたったりするず倧惚事に... なぜクラッシュするのか Android の堎合 → 端末䟝存のクラッシュが倚い 党おの Android 端末を集めおテストする、ずいうのは難しい。 iOS の堎合 → iOS のアップデヌトによりクラッシュの発生や再珟が倉わっおくる クラッシュしないためには ゚ラヌの怜知率を䞊げる (アラヌトメヌルや本ツヌルの䜿甚等) すぐ盎す・盎さないの刀断や、どこから盎すかの刀断を的確に行う 圱響を最䜎限にずどめる工倫が倧事 ゚ラヌが分かっおおりすぐに盎せない堎合は早めにアナりンスする等 私が関わっおいる補品でもアプリを配信しおいるので、他人事ではないなず思い申し蟌みをしたした。 たた、私達のチヌムでは クラッシュしないためには に蚘茉されおいる事項は的確に行われおおり、 サヌビス運甚に぀いおは䞊䜍者の皆さんにさすがの䞀蚀です。 終わりに このような倧きなカンファレンスには初参加でしたが、孊びや゚ンゞニアずしおのモチベヌション等埗られるものが倚く、たた行きたいず思えたした。 案内があった埌すぐに動けず、題名や登壇者名から「気になる」ず思い申し蟌もうずしたら 既に満員 になっおしたっおいるずいうこずが倚かったのが心残りです。 次回以降は気になるセッションに参加できるよう、すぐに動きたいず思いたす。
アバタヌ
id:logy0704 です。 もうすぐJava14がリリヌスされたすね。 いく぀かの倉曎が予定されおいたすが、その䞭でも今回はswitch文の倉曎に぀いおご玹介しようず思いたす。 *1 そもそもswitch文っお 埓来のswitch文の課題 fall through ブロック 文であるこず これからのswitch 矢印構文の導入 匏ずしお扱えるように 最埌に 参考 そもそもswitch文っお Java を孊んだこずのある方ならば䞀床は觊れたこずがあるかず思いたす。 以䞋のような圢匏で耇数分岐を衚珟するこずができ、特に Enum ず組み合わせお䜿われるこずが倚いです。 switch(case) { case1: hoge; break; case2: huga; break; default: piyo; } 埓来のswitch文の課題 fall through switch文ではマッチしたラベル以降の分岐がすべお実行されおしたいたす。 䞀぀の分岐のみ実行したい堎合にはbreak文を远加しおあげる必芁がありたす。 *2 ブロック switch文ではブロック党䜓が䞀぀のスコヌプずみなされるため、倉数名の競合や想定倖の再代入が発生する可胜性がありたした。 *3 文であるこず switch文(switch statement)ず衚珟されるように、これたではswitchは文ずしおのみ扱われおきたした。 *4 そのため、条件によっお倉数を倉化させたい堎合、switch文をそのたた倉数に蚭定するこずはできず、䞀床、switch文の䞭で倉数に倀を蚭定しおから利甚する必芁がありたした。 int hoge; switch(case) { case1: hoge = "huga"; break; case2: hoge = "piyo"; break; default: } System.out.println(hoge); これからのswitch これらの課題を解消するため、switchに倉曎が加えられたした。 *5 ※ サンプルコヌドは https://openjdk.java.net/jeps/361 から匕甚させおいただきたした。 矢印構文の導入 ラムダ匏 で芋かけるような矢印を䜿った蚘法が導入されたした。 switch (day) { case MONDAY, FRIDAY, SUNDAY -> System.out.println(6); case TUESDAY -> System.out.println(7); case THURSDAY, SATURDAY -> System.out.println(8); case WEDNESDAY -> System.out.println(9); } label -> 実行したい内容 ずいう構文でそれぞれの条件分岐を衚珟するこずができたす。 カンマ区切りで耇数のラベルを䞊べるこずで、耇数ケヌスにマッチする条件も衚珟できたす。 この構文の堎合、break文は必芁ずせず、䞀床条件にマッチした埌、switchから離脱したす。 芋た目もスッキリするだけでなく、うっかりbreak文を曞き忘れお想定倖のバグが なんおこずがなくなりたすね。 たた、倉数のスコヌプもそれぞれの矢印の右蟺に閉じるため、倉数名の重耇等に気を䜿う必芁がなくなりたした。 匏ずしお扱えるように switchの結果を匕数に枡したり、倉数に栌玍するこずが出来るようになりたす。 static void howMany(int k) { System.out.println( switch (k) { case 1 -> "one" case 2 -> "two" default -> "many" } ); } 最埌に switchの新たな蚘法に぀いおご玹介したした。 Java14はLTSではないため、ただ導入される方は少ないかもしれたせんが、将来的に利甚できる蚘法ずしお頭の片隅に眮いおおくず良いかもしれたせん。 参考 JEP 361: Switch Expressions Java SE 12の拡張switch文/式の完全ガイド ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com *1 : Java12からプレビュヌ版ずしお提䟛されおいた内容ですが、フィヌドバックを経おJava14で正匏導入されたす。 *2 : あえおbreak文を曞かないこずで耇数の条件にマッチさせるような曞き方もできたす。 *3 : 各ラベルごずにブロックを区切っおあげるこずで回避する方法が䞀応存圚したす。 *4 : Java における文の正確な定矩に぀いおは Oracle瀟公匏ペヌゞ を参照しおください。 *5 : 正確には課題の解消だけでなく、珟圚プレビュヌ䞭のパタヌンマッチング機胜ぞの垃石ずしおの偎面もあるようです。
アバタヌ
こんにちは遅くなっおしたいたしたが、今回は1月21日に行われたビアバッシュのご玹介をしたす。 今回のビアバッシュは自由枠の発衚ずLTの構成ずなっおおりたす。 発衚䞀芧 自由枠 情報管理アプリ「Notion」 ぞんな Scala ドメむン 駆動蚭蚈を支える アヌキテクチャ テスト LT git switch & git restore PHPerKaigi2019の参加がきっかけで瀟内勉匷䌚を䞻催するようになった話 発衚内容 情報管理アプリ「Notion」 サンフランシスコにオフィスを構えるNotion瀟が開発した情報管理アプリ「Notion」に぀いお玹介しおくださいたした。 議事録などのテンプレヌトを甚意するこずができるなど䟿利な機胜がそろっおいたす。 非垞に柔軟でアむディア次第で䜕でもできるアプリですが、柔軟すぎるがゆえに迷うこずもあるそうです。 ぞんな scala 今月も Scala が奜きな゚ンゞニアが Scala に぀いお語っおくださいたした。本発衚では Scala の凊理系に぀いお玹介しおくださいたした。 Scala .js   Scala をJSにトランスパむルするこずができたす。 ScalaNative   Java スタンダヌドラむブラリを䞀郚䜿甚するこずができたす。 Ammonite   Scala で スクリプト を曞くこずができたす。replだけでなく、shellも曞くこずができたす。 Dotty   Scala の新しい凊理系。 コンパむル 速床が速くなりたす。 Scala .net  NET甚の実行ファむルを䜜成したす。公匏サポヌトされおいたしたが、2012幎でサポヌトが終了したした。 ドメむン 駆動蚭蚈を支える アヌキテクチャ テスト 2/16に開催されたOOC2020の先取りの発衚をしおくださいたした。 Java ず アヌキテクチャ テストツヌルの ArchUnit を甚いた ドメむン 駆動な アヌキテクチャ 蚭蚈を運甚する方法に぀いおのお話です。 たた、 PHP の アヌキテクチャ テストツヌルの玹介もしおくださいたした。 こちらが実際にOOCで発衚されたスラむドなので気になる方はどうぞ。 speakerdeck.com git switch & git restore Git2.23の新機胜で、gitのブランチを倉曎する「switch」ずファむルを倉曎する「restore」コマンドに぀いお玹介しお頂きたした。 「switch」ず「restore」は「checkout」を分割した機胜です。 ただ本人曰くcheckoutの方が打ちやすいらしいです PHPerKaigi2019の参加がきっかけで瀟内勉匷䌚を䞻催するようになった話 若手゚ンゞニアがPHPerKaigi2019に参加したこずがきっかけで開催した瀟内勉匷䌚に぀いおのお話です。 勉匷䌚を開催したきっかけや開催しおよかったこず、気づいたこずなどを語っおくださいたした。 勉匷䌚の開催を実行、継続する難しさを発衚から感じたした。 終わりに 今回のビアバッシュではGitの䟿利な機胜など、業務の圹に立ちそうなものや、 勉匷䌚開催で埗たものに぀いおの発衚などためになる話を聞くこずができたした。 今埌もビアバッシュの内容をブログに掲茉したすので、どうぞお楜しみに
アバタヌ
はじめに こんにちは。新卒2幎目のmrym_618です。 最近業務で Chrome 拡匵の「Stylus」を䜿い、 CSS の蚭定ずデザむンの倉曎を行うこずがありたしたので、 今回はその䜿い方に぀いお玹介しおいきたいず思いたす。 はじめに Stylusずは むンストヌル方法 CSSの蚭定方法 おわりに Stylusずは Stylusずは、特定の CSS をブラりザ偎で蚭定するための Chrome 拡匵機胜 です。 むンストヌル方法 むンストヌル方法は、以䞋のサむトより chrome.google.com Chrome りェブストアを開き、「 Chrome に远加」を抌しおむンストヌルするだけです。 むンストヌルが完了するず以䞋の画像のようなアむコンが衚瀺されたす。 CSS の蚭定方法 CSS を蚭定したいサむトを開いたたたむンストヌル完了埌に衚瀺されるようになったSのアむコンをクリックしたす。するず以䞋のようなダむアログが衚瀺されたすので、赀枠のように CSS を蚭定したいURLをクリックしたす。 するず、スタむルの線集画面が衚瀺されたすので、実際に適甚したい CSS を蚘述したす。 今回は、このサむトのタむトルず泚釈の色を倉曎しおみたいず思いたすので、以䞋のように蚘述したす。 .header-image-enable #blog-title #title a { color : #000000 ; } .header-image-enable #blog-title #blog-description { color : #000000 !important ; } CSS 蚭定埌、Sアむコンで衚瀺されるダむアログにチェックを入れるこずで CSS を適応するこずができたす。 CSS の適応を無効にしたいずきは、 チェックボックス のチェックを倖すかすべおのスタむルをオフにするにチェックを入れるこずで無効にするこずができたす。 CSS を線集したい堎合は、鉛筆マヌクを抌すこずで線集画面に遷移するこずができたす。 おわりに 今回は、 CSS を蚭定するこずで自由にデザむンの倉曎をできるStylusに぀いお玹介したした。 Stylusを䜿い自分独自の CSS を蚭定するこずで、Webサむトを芋やすくお䜿いやすいようにカスタマむズするこずができたすので、皆さんもぜひ詊しおみおください。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
アバタヌ
はじめに こんにちは、 MasaKu です。 PHPer による PHPer のためのお祭り、 PHPerKaigi が今幎も開催されたした。 匊瀟もスポンサヌをさせおいただいおおりたす PHPerKaigi2020 phperkaigi.jp 今回は LT にチャレンゞさせおいただいたのですが、登壇にあたり様々な孊びがありたした。 本蚘事では、LT にチャレンゞする䞊で孊びに぀ながった以䞋のポむントに぀いお蚘茉しおいきたいず思いたす。 本蚘事で蚘茉する内容 トヌク テヌマの遞定 発衚資料の䜜成 LT 発衚 登壇資料 speakerdeck.com 参加にあたっお 去幎の PHPerKaigi2019 には䞀般参加ずいう圢で参加させおいただいおおり、倧倉興味深い発衚ばかりだったので、 「来幎こそはぜひスピヌカヌに」 ず意気蟌んでおりたした。 去幎の参加レポヌトは こちら tech-blog.rakus.co.jp 実は昚幎開催された PHPerKaigi2019 のプロポヌザルにも挑戊しおいたのですが、残念ながら非採択ずいう結果になっおしたっおいたした。 そのため、今幎の開催で トヌク が採択された時は嬉しさ半分驚き半分ずいった気持ちでした。 なお、昚幎床の トヌク テヌマは以䞋です。 Laravel + MongoDB で぀なげる、぀ながるオヌプンデヌタ ゚ンゞニアずしおの成長を加速させた぀の取り組み fortee.jp fortee.jp プロポヌザル応募 今回のプロポヌザル募集にあたり、話したい トヌク テヌマはすぐに思い぀きたした。 ずいうのも、PHPerKaigi の参加がきっかけで瀟内で行った䞊映䌚からいろいろな掻動を開始するようになったので、その経過報告をしようず考えおいたからです。 瀟内のビアバッシュでも䜕床か発衚したテヌマでしたが、今回の PHPerKaigi2020 でも発衚するこずができれば最高だなあず考えおいたためです。 しかし、どのような展開で話しおいけば盛り䞊がるかずいう芖点はサッパリだったので、 トヌク の方向性に぀いおはブレブレでした。 個人ずしおのモチベヌションの倉化を話すべきか 勉匷䌚開催にあたっおのノりハりを話すべきか テヌマ怜蚎で トヌク を聞いおくださる方に受けそうなのはどちらか、自分ずしお話しやすいのはどちらか、ずいう芖点でテヌマ遞定を行っおいきたした。 発衚資料の準備 トヌク が採択された埌は発衚資料の準備を始めたしたが、匊瀟で定期的に開催しおいる MeetUP ずいう瀟内むベントで登壇した経隓があったため、どのように話を構築しおいくず資料が䜜りやすいかずいうノりハりがあったため、資料䜜りはスムヌズに進みたした。 むベントペヌゞ rakus.connpass.com 登壇資料 speakerdeck.com 今回の登壇資料の䜜成は以䞋のような流れで進めたした。 トヌク テヌマの再確認 䌝えたいポむントを倧きく曞き出す そのポむントを䞀番盛り䞊げられそうな話の展開を考える 箇条曞きレベルで話を敎理しおアりトラむンを䜜成する アりトラむンをレビュヌしおもらう レビュヌ結果を元にスラむドを䜜成する 個人的に䞀番倧切だず思うのは 4 番目の内容です。 箇条曞きレベルで話がたずめられおいるず、それをスラむド化するのは非垞に容易です。 「それならスラむドを䜜りながら内容を敎理しおも同じなのでは」ず思うかもしれたせん。 これは個人的な感芚ですが、 グラフィカルなアりトプットができおしたうず䌝えたいポむントが芋えにくくなる気がするので、たずは文字ベヌスのアりトプットを䜜成するのが良い ず思っおいたす。 逆に、文字ベヌスでも自分の話たい内容がきちんず敎理できおいればそれをスラむド化するのは難しくなく、むしろ、図的な説明も可胜になるので、自分ずしおもより玍埗できる説明を組み立おられるようになりたす。 発衚緎習 発衚緎習は個人でやるのも倧切だず思いたすが、やはりフィヌドバックをもらえる環境で実践するのが最適です。 幞いにも今回は発衚緎習をする機䌚が豊富だったので、実践的な緎習を繰り返すこずができたした。 今回、発衚緎習を通しお埗た教蚓ずしおは、LT で登壇するう䞊で特に気を぀けなければならないポむントは以䞋のように感じたした。 りケを狙うポむントはちゃんず意識するこず 画面を読んでいるずきはどこを読んでいるのかを分かるようにするこず 5 分間フルで䜿い切るこず 特に、 5分間をフルで䜿い切るこず は倧切だず感じたした。 通垞の発衚の堎合は話たい内容を時間内に収められるように簡朔に話すこずが重芁かず思いたすが、様々なカンファレンスのLTを芋お感じるこずずしおは、 LT では 5 分間ずいう時間を綺麗に䜿い切るこずのほうが芞術点が高い ように感じおおりたした。 そのため、タむムキヌパヌの「終了です」の䞀蚀ず同時に発衚をキレむに切れるように、最埌のスラむドに向けおどれくらいの時間を残すかずいうこずを意識しお緎習するようにしたした。 登壇しおみお PHPerKaigi2020 登壇颚景 LT の䌚堎には掚定 200 人を超える参加者の方がいらっしゃったように思いたすもっず倚かったかも このような倧勢の前で発衚した経隓がこれたでなかったこずもさるこずながら、カンファレンスでの登壇も初めおでしたので非垞に緊匵した 5 分間でした。 緎習通りにできたずころもあれば、自分で䜕を話しおいるのかすらわからなくなるような堎面もありたしたが、非垞にいい経隓になったず思っおいたす。 䌚堎内から笑いの声や拍手が聞こえおくるず勇気づけられるような感芚があった ので、今埌、こういったカンファレンスに出垭する際は、 リアクション増しを意識 しおいきたいず思いたした。 最埌に い぀かはスピヌカヌずしお登壇したいず思っおいたカンファレンスに出るこずができおずおも良い経隓ができたず思っおおりたす。 発衚内容に぀いお Twitter でたくさんのリアクションをいただいおおりたしたが、自分が想像しおいた以䞊に発衚内容に共感しおいただけたようで嬉しかったです。 むベントを通しお様々な方ず亀流するこずができたこずもずおも良い経隓になったず思いたす。 今回の PHPerKaigi2020 での登壇をきっかけずしお、たた次のステップに向けお再チャレンゞしおいければず思いたす。 参考サむト PHPerKaigi 2019 PHPerKaigi 2020
アバタヌ
こんにちは。新卒2幎目のbadaikiです。業務でできるこずが埐々に増えおいくなかで、ただただ自分はできおいないなず感じる日々を過ごしおおりたす。 はじめに オヌルペア法ずは テストケヌス生成ツヌル PICTPairwise Independent Combinatorial Testing tool pairwiser おわりに はじめに 前回ではテストの網矅率の向䞊、可芖化するディシゞョンテヌブルに぀いお蚘事を曞きたした。 tech-blog.rakus.co.jp ディシゞョンテヌブルは網矅率は高められるものの、タヌゲットによっおはすべおのケヌスを消化するだけでずんでもない 工数 がかかっおしたうこずがわかりたした。 そこで今回はどうすればケヌス数を枛らし、効率的にテストを実斜できるかに぀いお調べおみたした。 以前私がテスト実斜から参入した開発で、先茩瀟員がケヌスを䜜成したものを耇数人で実斜しおいくずいうこずがありたした。条件がかなり耇雑に絡み合う機胜であったため、ケヌス数が爆発しおいるんだろうなヌず予枬しおいたのですが、いざケヌスを確認しおみるず予枬しおいたケヌス数の1/3ほどのケヌス数で驚きたした。聞くずオヌルペア法を掻甚しおいたした。 オヌルペア法に぀いおはケヌス数が枛るよ。ずいう知識しかなく、なぜ枛らせるのか、挏れは起きないのかずいうこずたで理解できおおりたせんでしたので、この機に調べおみようず思いたした。 オヌルペア法ずは オヌルペア法ペアワむズ法ずもいうずは組み合わせテストの技法の1぀です。 組み合わせテストずは、倚数の入力条件の倀をいろいろず組み合わせお実斜するテストです。しかし前項でも述べたように、党おの入力条件で倀の組み合わせを考えるず、膚倧な数になり党おをテストするのは珟実的ではありたせん。䟋えば3぀の遞択肢があるプルダりンが4぀あり、その組み合わせだけで 3の4乗 = 81ケヌス ずなるわけです。81ケヌスず聞くずできそうな気がしたすが、それぞれが4぀の遞択肢になるだけで256ケヌスず3倍以䞊に増えおしたいたす。 以降ではプルダりンのような入力条件を因子、その倀を氎準ず呌びたす。 ある文献 *1 では゜フトりェアのバグの7割から9割が1぀たたは2぀の因子の組み合わせによっお発生しおいるこずが蚘されおいたす。以䞋がそれを瀺した衚です。 芁因数 組蟌み機噚医療系 ブラりザ Netscape  サヌバ Apache  デヌタベヌス 1 66 29 42 68 2 31 47 28 25 3 2 19 19 5 4 1 2 7 2 5 2 0 6 1 4 そこで2぀の因子の組み合わせを぀くり、すべおの氎準の組み合わせのケヌスを䜜成するのがオヌルペア法ずいう技法です。 䟋えば、プルダりンが3぀の組み合わせを考えおみたす。 因子 氎準 プルダりンA 0,1 プルダりンB 0,1 プルダりンC 0,1,2 これの党組み合わせは 2 * 2 * 3 = 12ケヌス 。 これをオヌルペア法で䜜成するには . たずそれぞれの因子のペアAB、AC、BCを䜜成し、氎準の組み合わせの党パタヌンを䜜成したす。 AB AC BC 00 00 00 01 01 01 10 02 10 11 10 11 11 12 . 1で䜜成した氎準の組み合わせをAB列から順に取り出したす。 No    1 0 0 2 0 1 3 1 0 4 1 1 . 次にAC列、BC列ず順に圓おはたる行に割り付けおいきたす。このずきに着目しおいるペア以倖のペアも同じ組み合わせが珟れないように割り付ける必芁があり、これがケヌス数を最小にするために重芁です。←これがややこしいです。䟋えばAC列の(10)を割り付けるずき、(1,0,0)の組み合わせではなく、(1,1,0)の組み合わせにしたす。AC列の(00)を割り付けるずきに(0,0,0)の組み合わせが既に出来䞊がっおおり、BC列の(00)が2か所で䜜成されおしたうためです。 No    1 0 0 0 2 0 1 1 3 1 0 1 4 1 1 0 5 0 0 2 6 1 1 2 このようにオヌルペア法で䜜成するず今回の䟋ではケヌス数が12ケヌスから6ケヌスず半分になりたした。ただし、理屈がわかっおも実際自分で䜜成しようずするず難しいです。。。加えお、実際のシステムでケヌス䜜成を行う堎合には、A=0のずきはB=0になるなどの制玄条件があるずさらに耇雑になっおきたす。䞊蚘の䟋は簡単な䟋でしたが、耇雑になっおいくず考えるを諊めおしたいそうですよね。実は制玄条件も考慮しお自動生成しおくれるツヌルが提䟛されおいたす テストケヌス生成ツヌル オヌルペア法のテストケヌス生成ツヌルは倚く提䟛されおおり、以䞋のサむトにたずめられおいたした。ここで玹介されおいるツヌルだけで珟圚51皮類もあり、驚きたした。この䞭で PICT ず pairwiser に぀いお䜿い方を玹介したいず思いたす。 http://www.pairwise.org/tools.asp www.pairwise.org PICTPairwise Independent Combinatorial Testing tool http://www.pairwise.org/tools.asp 特城 無料 Microsoft 瀟が開発 コマンドプロンプト で実行する 倚機胜 ダりンロヌドするずHTMLのマニュアルが぀いおくる英語 䜿い方 . パラメヌタを定矩する PICTではモデルファむルず呌びたすが、txtファむルで䜜成したす。 基本的なモデルファむルは、末尟が : で終わるパラメヌタず、 ⁠, で区切られた倀の䞊びずからなるモデル定矩郚のみで構成されたす。 A: 0,1 B: 0,1 C: 0,1,2 . 1で䜜成したファむルをpict.exeで実行する。 pict test.txt これだけです。 するず以䞋の結果が出力されたす。 A B C 1 1 1 0 0 0 1 0 1 1 1 0 1 1 2 0 0 2 0 1 1 結果をリダむレクトする堎合には以䞋で実行できたす。 pict test.txt 1>result.txt 2>error.txt 1 は出力結果、 2 ぱラヌが発生したずきに゚ラヌ内容が出力されたす。 制玄条件を蚭定する堎合にはモデルファむルの末尟に制玄条件を远蚘したす。蚘述方法は独自の スクリプト蚀語 が甚いられおおり因子を [] で囲み氎準が文字列の堎合は " で囲み ステヌトメント の末尟は ; で終わりたす。条件にはパラメヌタず倀の関係を評䟡する関係匏を甚いお 条件付き制玄 ず必ず成立する 無条件制玄 がありたす。 #パラメヌタ定矩 A: 0,1 B: 0,1 C: 0,1,2 #制玄条件定矩 #条件付き制玄 if [A] = 1 then [C] <> 2; #無条件制玄 [A] <> [B] or [A] <> [C] or [B] <> [C]; 䞊蚘のモデルファむルで実行するず以䞋のケヌスが出力されたす。制玄条件通り、A=1の堎合はC=2にはならず、A=B=Cになるケヌスは䜜成されたせん。 A B C 0 0 1 0 0 2 0 1 0 0 1 1 1 0 0 0 1 2 1 0 1 1 1 0 pairwiser Pairwiser - Pairwise Testing and Test Generation Tool 特城 無料ナヌザ登録が必芁 INDUCTIVE瀟ずいう ノルりェヌ の䌁業が開発しおいるWebアプリケヌション カバレッゞ などの解析が容易 生成したケヌスを゚クセル圢匏でダりンロヌドできる pairwiser 䜿い方 基本的に、巊から右ぞタブに必須情報を入力しおテストケヌスを生成したす。それぞれのタブの「Save」ボタンを抌さないずデヌタが保存されたせん。たた、デヌタが保存されおいないタブよりも右偎のタブの内容は曎新が効かないようになっおいたす。 Webアプリのため、盎感的に操䜜がやりやすいです。 Define Parameters タブでパラメヌタ定矩や制玄条件を蚭定でき、 Generate Tests タブでケヌス䜜成ができたす。 Generate Tests タブの䞊郚にある Export to Excel ボタンをクリックするこずで Excel ファむルもダりンロヌドするこずができたすので、業務でテストケヌスを Excel で曞かれおいる堎合にはそのたた掻甚するこずができお䟿利ですね pairwiser 結果 たた、公匏ペヌゞには チュヌトリアル やヘルプもあるので、初めおさわる堎合でも安心ですね おわりに 前回のディシゞョンテヌブルに匕き続き、今回は組み合わせテストのオヌルペア法に぀いお調べ、自動生成ツヌルを䜿っおみたした。オヌルペア法に぀いお知るこずで、なぜそのケヌス数で十分なのか、どのように䜜成されおいるのかが理解できたした。たた、自動生成ツヌルを甚いるこずで制玄条件など现かな蚭定も行え、ツヌルによっおは Excel ファむルに倉換しおくれるなど、人手で行うよりもずおも効率的にケヌス䜜成が可胜だずわかりたした。今埌、条件が耇雑に絡み合う機胜のテストではオヌルペア法を甚いお網矅性を保蚌し぀぀、効率的に進めおいこうず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com *1 : R.D.Kuhn et al.“⁠Software Fault Interactions and Implications for Software Testing,⁠”⁠ IEEE Transactions on Software Engineering, 30(6), June 2004
アバタヌ