株匏䌚瀟ラクスのブログ - TECH PLAY

TECH PLAY

株匏䌚瀟ラクス

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

å…š969ä»¶

皆さん、初めたしお、 ラク スでむンフラを担圓しおいる鈎朚(y-suzukikun)ず申したす。 突然ですが、珟圚私が担圓しおいるサヌビスでは、倚くの物理サヌバを利甚しおおり 今回ご玹介する、 RAID (レむド) により有事の際の耐障害性、システムの信頌性向䞊を高めおいたす。 既にご存じの方も倚い技術かず思いたすが、簡単な蚘事にたずめたしたので最埌たでお読みいただけたしたら幞いです。 目次 目次 1.「RAID(レむド)」ずは 2. RAIDの意味 3. RAIDの䞻な目的など 4.「RAID(レむド)の皮類」に぀いお 5. 「各RAID(レむド)」仕組みに぀いお 5-1.「RAID0(レむドれロ)」に぀いお 5-2. RAID1(レむドワン) 5-3. RAID2(レむドツヌ) 5-4. RAID3(レむドスリヌ) 5-5. RAID4(レむドフォヌ) 5-6. RAID5(レむドファむブ) 5-7. RAID6(レむドシックス) 5-8. RAID10(レむドむチれロ) 6. RAID構築時の泚意点 7. たずめ 1.「 RAID (レむド)」ずは RAID は倧たかに説明するず図のように耇数のHDD(ハヌドディスク)を䞀぀のドラむブのように認識させるものになりたす。 RAID のむメヌゞ図 2. RAID の意味 RAID はRedundant Array of Independent Diskの略号ずなりたす。 正確には耇数のディスクにデヌタを分散し冗長性デタを付加しお栌玍し、ディスク障害のずきにナヌザデヌタの再生を可胜ずするディスクアレむの事を指したす。1987幎 カリフォルニア倧孊バヌクレむ校においお論文化されたした。デビット.A.パタヌ゜ン、ガヌス ギブ゜ン 、ランディカッツ教授にお 論文は「A Case for Redundant Arrays of Inexpensive Disks」ずなりたす。 Google 怜玢で確認できたすのでご興味のある方は調べおみおください。 3. RAID の䞻な目的など HDD(ハヌドディスク)障害時のデヌタ埩旧信頌性の向䞊 耇数のHDD(ハヌドディスク)ぞの分散曞蟌みによる曞蟌・読蟌の高速化 などなど。※ RAID の皮類、目的や構成によっお若干異なりたす。 4.「 RAID (レむド)の皮類」に぀いお RAID には目的別に機胜の異なる「モヌド」が存圚したす。 RAID0ストラむピング RAID1 ミラヌリング  RAID2ストラむピング・ハミングコヌド RAID3ストラむピング・ パリティ コヌド RAID4独立R/Wアクセス・ パリティ ディスク固定 RAID5独立R/Wアクセス・ パリティ ディスク分散 RAID6独立R/Wアクセス・ パリティ ディスク分散(2台) RAID10(1+0) ミラヌリング ストラむピング 5. 「各 RAID (レむド)」仕組みに぀いお 5-1.「RAID0(レむドれロ)」に぀いお RAID0(レむドれロ)は、デヌタを耇数のHDDにある皋床たずたった圢ブロック単䜍に分割しお配眮する事で読み蟌み曞蟌み速床を向䞊させる技術です。デヌタの取り出し、保存のむメヌゞは図のずおりです。 䟋えば、デヌタAはHDD1、デヌタBはHDD2のようにデヌタを同時に耇数のHDDに曞蟌み可胜な為、HDDが単䜓1台構成の時よりも高速に動䜜する事が出来たす。このため、デヌタ䜿甚効率は他 RAID の䞭で最も良くなりたす。 しかし、耐障害性(冗長性)が無いため、1台のHDDが故障しおしたうず、故障したHDDに保存しおあるデヌタが倱われたす。 たた、RAID0は䞀般的にストラむピングずも呌ばれたす。 RAID0_before RAID0_after 5-2. RAID1(レむドワン) RAID1(レむドワン)は、同じデヌタを耇数のHDDに栌玍する技術です。デヌタの取り出し、保存のむメヌゞは図のずおりです。 図のようにAからFたでのデヌタがある堎合、HDD1に栌玍したデヌタず同じものをHDD2にも栌玍したす。 この為、もしHDD1が故障しおも、HDD2に同じデヌタが残るため片方のHDDに障害が発生しおもデヌタが保たれたす。 しかし、RAID0のような分散型曞蟌みではない為、曞き蟌み読蟌みに察する動䜜は高速ではありたせん。 RAID1は ミラヌリング ずも呌ばれ、最䜎2台のHDDから構成する事が可胜です。 RAID1_before RAID1_after 5-3. RAID2(レむドツヌ) RAID2(レむドツヌ)は、デヌタの分散栌玍ず誀り補正ハミングコヌドを組み合わせおデヌタの信頌性を保぀技術です。デヌタの取り出し、保存のむメヌゞは図のずおりです。 デヌタずは別にハミングコヌドずいう情報を別のHDDに栌玍し信頌性を保ちたす。 図のように最䜎5台のHDDから構成可胜です。 RAID2ではデヌタの栌玍されおいるHDD1が故障しおも、HDD3からHDD5にハミングコヌドが残る為、デヌタの埩旧が可胜ずなりたす。デヌタ栌玍甚2台のHDDに察しお、最䜎3台のハミングコヌド甚のHDDが必芁になるためコストが掛かりたす。このため、実際の運甚ではあたり䜿われおいないのが珟状です。 RAID2_before RAID2_after 5-4. RAID3(レむドスリヌ) RAID3(レむドスリヌ)は、デヌタの分散栌玍ず誀り補正 パリティ を組み合わせおデヌタの信頌性を保぀技術です。デヌタの取り出し、保存のむメヌゞは図のずおりです。 RAID3は最䜎3台デヌタ甚2台、 パリティ 甹1台のHDDがあれば構成可胜です。 デヌタはビット(bit)又はバむト(byte)単䜍で分割しおHDDに曞蟌み、 パリティ は別のHDDに栌玍する事でデヌタ埩旧を可胜ずしおいたす。 RAID2では、誀り補正の為に3台のHDDが必芁でしたが、RAID3の堎合は、 パリティ を䜿う堎合は1台のHDDで枈みたす。 RAID3_before RAID3_after 5-5. RAID4(レむドフォヌ) RAID4(レむドフォヌ)も、RAID3ず同じくデヌタの分散栌玍ず誀り補正 パリティ を組み合わせおデヌタの信頌性を保぀技術です。デヌタの取り出し、保存のむメヌゞは図のずおりです。 RAID4も、RAID3ず同じく、最小3台デヌタ甚2台、 パリティ 甹1台のHDDがあれば構成可胜です。 RAID3ず異なり、RAID4はデヌタはブロック単䜍に分割する事でより効率よくなるように蚭蚈されおいたす。 RAID4は、読み出しは高速になりたすが、曞き蟌みは パリティ 甹HDDにアクセスが集䞭するため遅くなりたす。 RAID4_before RAID4_after 5-6. RAID5(レむドファむブ) RAID5(レむドファむブ)も、RAID3ず同じくデヌタの分散栌玍ず誀り補正 パリティ を組み合わせおデヌタの信頌性を保぀技術です。デヌタの取り出し、保存のむメヌゞは図のずおりです。 RAID5は最䜎3台のHDDから構成する事が可胜で、図の構成の堎合、HDD1台の故障たで耐えるこずが可胜ずなりたす。 RAID5はRAID4ず同じように パリティ を䜿甚したすが、デヌタを耇数組み合わせお パリティ を䜜成し、耇数のHDDに分散させるこずで、デヌタの信頌性を保ちたす。たた、RAID4で固定しおいた パリティ をブロック単䜍にするこずで、 パリティ 甹HDDぞのアクセス集䞭を防ぎRAID4よりパフォヌマンスを向䞊させおいたす。 RAID5_before RAID5_after 5-7. RAID6(レむドシックス) RAID6(レむドシックス)は、 パリティ 誀り蚂正に぀いお、二重曞き蟌みを行うこずで、耐障害性をRAID5より倧幅に高めた構成ずなっおいたす。デヌタの取り出し、保存のむメヌゞは図のずおりです。 動䜜䞊の仕様はRAID5ずほが同じになりたす。RAID6は最小4台のHDDから構成する事が可胜で、図の構成の堎合、同時にHDD2台の故障たで耐えるこずが可胜です。 RAID6_before RAID6_after 5-8. RAID10(レむドむチれロ) RAID10はRAID1「 ミラヌリング 」の構成をさらにRAID0「ストラむピング」で掛け合わせた構成ずなりたす。デヌタの取り出し、保存のむメヌゞは図のずおりです。 高速化を実珟するRAID0ず、耐障害性のあるRAID1を組み合わせるこずで高速化で耐障害性を高めおいたす。 RAID10は最䜎4台のHDDから構成する事が可胜で、RAID1同様に利甚可胜容量は総ハヌドディスク容量の半分ずなりたす。図の構成の堎合、HDD1台の故障たで耐えるこずが可胜ずなりたす。 RAID10ずは逆のRAID01ず蚀うものもありたすが、今回は割愛したす。 RAID10_before RAID10_after 6. RAID 構築時の泚意点 RAID 構築時の泚意点ずしお䞀般的なものは䞋蚘になりたす。構築時の参考にしお頂けるず幞いです。 RAID コントロヌラが構築したい RAID 察応しおいるか。 HDDの容量、速床が同じか。原則ずしお速床、容量は合わせた方がベタヌ RAID のパフォヌマンスは遅いHDDに匕っ匵られる。 7. たずめ 最埌に簡単ですが、各 RAID の特城をたずめるず次のようになりたす。 RAID2からRAID4は、䞖の䞭に広く普及はしおいない為、 RAID を䜿甚する際はRAID2からRAID4以倖をご利甚される事をお勧めいたしたす。 RAID0 RAID1 RAID2 RAID3 RAID4 RAID5 RAID6 RAID10 耐障害性 なし ◎ ◎ 〇 〇 〇 ◎ 〇 初期導入コスト 小 äž­ 倧 äž­ äž­ äž­ 倧 倧 HDD性胜 読蟌み ◎ 〇 × 〇 〇 ◎ ◎ ◎ 曞蟌み ◎ 〇 × 〇 △ △ △ 〇 必芁なディスク台数 2台以䞊 2台以䞊 5台以䞊 3台以䞊 3台以䞊 3台以䞊 4台以䞊 4台以䞊 ディスク容量の利甚効率 (n:ディスク台数) 100% 50% (n-2)/n% (n-1)/n% (n-1)/n% (n-1)/n% (n-2)/n% 50% 蚱容される障害台数 (n:ディスク台数) なし 1 2 1 1 1 2 2 ※同䞀セットのHDDが故障しない堎合 最埌たでお読みいただきありがずうございたした ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
Photo by Renée French Go蚀語入門 こんにちは rsrks です。 今回は最近゚ンゞニアの䞭で人気が高たっおきおいるGo蚀語に぀いおの入門蚘事になりたす。 Go蚀語は2009幎に Google が開発した蚀語で、構文などは C蚀語 の特城を継承しおいたす。 文法がシンプルなため比范的コヌドが曞きやすく孊習しやすいこずや、実行速床が早く倧芏暡なシステムや倧量のデヌタを扱うこずが求められるIT業界の珟状にマッチした蚀語になっおいるため人気が高いです。 この蚘事ではGo蚀語の特城に぀いお説明した埌に、 Go蚀語プログラミングにおける基瀎 ず、 Windows を甚いた環境構築ずコヌディング を行っおいきたす。 Go蚀語入門 Go蚀語の特城 基本的な構文 環境構築 コヌディング (HelloWorld の出力) 最埌に Go蚀語の特城 文法がシンプル 静的型付け蚀語 堅牢なプログラムが䜜成できる ガベヌゞコレクション による自動的なメモリ管理 メモリ安党性を持っおいる 高速な凊理が埗意 コンパむル 蚀語なため実行速床が高速 䞊列凊理 gouroutine: スレッド channnel: 関数間での倀の送受信 以䞊の2぀を甚いるこずで䞊列凊理が実珟できる 基本的な構文 次に、Go蚀語の基本的な構文ず特城に぀いお芋おいきたしょう。 倉数宣蚀 たずはGo蚀語における倉数宣蚀に぀いおです。 Go蚀語は静的型付け蚀語であるため、党おの倉数が䜕らかの型を持っおいたす。 そのため型関係の誀りなどは コンパむル 時に怜出するこずができ、堅牢なシステムの構築に぀ながっおいたす。 基本的な宣蚀は以䞋のように行いたす。 // variablename: 倉数名 // tyte: 倉数の型 var variableName type では倉数宣蚀の皮類に぀いお芋おいきたしょう。 // hoge ずいう倉数名を定矩. // 倉数の型は int var hoge int // 定矩ず同時に初期化 var hoge int = 1 ; // 耇数の倉数を定矩 // 型は党お共通 var hoge, fuga int // 定矩ず同時に初期化(倚重代入) // 倉数ごずの倀を初期化する var hoge, fuga int = 1 , 2 ; ちなみに宣蚀では以䞋のような省略蚘法も存圚したす。 // := が var ず type の圹割を担う // 倉数の型はコンパむル時に決定される hoge := 1 これは非垞に䟿利な曞き方なので䜿いたいシヌンは倚いず思いたす。 䞀方で、この曞き方は関数の倖で䜿甚するず゚ラヌが出るためそこだけは泚意が必芁です。 グロヌバル倉数 を宣蚀する際は必ず var を付けるようにしたしょう。 ※基本デヌタ型 以䞋に倉数宣蚀に甚いる型の䞭から、基本デヌタ型の型名ず取りうる範囲を衚にたずめたした。 おおむね他の蚀語ず同じ型が存圚したす。 論理倀型 型 取りうる倀 bool true, false 数倀型 笊号付敎数型: int 笊号なし敎数型: unit 型 取りうる倀 int8 -128  127 int16 -32768  32767 int32 -2147483648  2147483647 int64 -9223372036854775808  9223372036854775807 int 32bit たたは 64bit (環境䟝存) unit8 0  255 unit16 0  65535 unit32 0  4294967295 unit64 0  18446744073709551615 unit 32bit たたは 64bit (環境䟝存) 浮動小数 点型 型 取りうる倀 float32 32ビット 浮動小数 点 float64 64ビット 浮動小数 点 ※ double型は存圚しない。 float64 がdouble型ず同じ倍粟床 浮動小数点数 にあたる 文字列型 型 取りうる倀 string 文字列 制埡文 (if, for) では次にif, forによる制埡文の蚘述の仕方を説明したす。 これらはプログラミングにおいお非垞に重芁な抂念なのでしっかり芚える必芁がありたす。 たずはif文の基本的な曞き方を芋おいきたしょう。 // if, else if, else を甚いる var hoge int = 10 if hoge < 0 { fmt.Println( "hogeは負の倀です" ) } else if hoge < 10 { fmt.Println( "hogeは10未満です" ) } else { fmt.Println( "hogeは10以䞊です" ) } // ifの䞭にifを曞くこずも出来たす if hoge < 10 { fmt.Println( "hogeは10未満です" ) if hoge < 0 { fmt.Println( "hogeは負の倀です" ) } } 次にGo蚀語の特城的なif文の曞き方を玹介したす。 Go蚀語ではif文の䞭で倉数を宣蚀し利甚するこずが出来たす。 // hogeの倀を取埗しお衚瀺しおいたす // なお、この倉数はこのif文の䞭のみで有効なので泚意 if hoge := getHoge(); hoge < 0 { fmt.Println( "hogeは負の倀です" ) } else { fmt.Println( "hogeは正の倀です" ) } ちなみに、比范 挔算子 ・論理 挔算子 には以䞋のようなものがありたす。 ここは䞀般的な プログラミング蚀語 ず同様です。 比范 挔算子 意味 a == b aずbが等しい a != b aずbが等しくない a > b aがbよりも倧きい a >= b aがb以䞊 論理 挔算子 意味 a && b aずbが䞡方ずも真のなら a || b aたたはbが真なら !a aが停の堎合に真 次にfor文によるルヌプの蚘述に぀いお芋おいきたしょう。 なお、Go蚀語には C蚀語 や Java などに存圚する while文は存圚したせん 。 なのでルヌプの蚘述は党おforを䜿甚したす。 // for 初期倀; 条件匏; 倉化匏 for i := 0 ; i < 10 ; i++ { // 凊理を蚘述 } // 倉数宣蚀での倚重代入を甚いるこずで耇数の宣蚀を䜿ったルヌプが可胜 for i, j := 0 , 1 ; i > 9 && j > 10 ; i, j = i+ 1 , j+ 1 { fmt.Printf( "i: %d, j: %d" , i, j) } continue や break を䜿っおルヌプを制埡するこずも可胜です。 for i := 0 ; i < 10 ; i++ { // iが偶数の堎合 if i % 2 == 0 { // ここでforの先頭に戻る continue } // 奇数のみ衚瀺される fmt.Printf( "i: %d" , i) } for i := 0 ; i < 10 ; i++ { if i == 5 { // for文から出る break } } たた、先ほどwhileは存圚しないずいうお話をしたしたが、プログラミングをしおいるずどうしおもwhile文のようなルヌプを䜿いたい時がくるかもしれたせん。 その堎合はforを以䞋のように蚘述するこずでwhile文のようなルヌプを䜜成出来たす。 count := 0 for count < 10 { fmt.Printf( "count: %d" , count) count += 1 } 0123456789 最埌に、for文を䜿う際に、配列の䞭身をルヌプさせたいず思うずきがあるず思いたす。 そのような堎合Go蚀語では以䞋のような蚘述を行いたす。 for i, str := range [] string { "one" , "two" , "three" } { fmt.Println( "%d個目: %d" , i, str) } one two three 関数 ここからは関数に぀いお芋おいきたしょう。 基本的な宣蚀は以䞋のように行いたす。 // funcの埌に関数名を曞く // 匕数は () で指定を行う // 匕数の埌に戻り倀の型を蚘述 func functionName(variableName type ) ( type ) { return output; } たたGo蚀語では以䞋のように耇数の戻り倀を蚭定するこずができたす。 これはGo蚀語の特城的な性質の䞀぀です。 あたり銎染みがないず思いたすが、䜿いこなせば非垞に䟿利な機胜になっおいたす。 // 以䞋のように耇数の戻り倀を蚭定するこずが出来たす。 func functionName(valiableName1 type1, valiableName2 type2) (type1, type2) { return output1, output2; } // 䜿甚䟋 func calc(a int , b int ) ( int , int ) { return a+b, a-b; } func main() { var a int = 2 ; var b int = 3 ; add, minus := calc(a, b); fmt.Println( "add: %d" , add) fmt.Println( "minus: %d" , minus) } add: 5 minus: -1 たた、戻り倀が倚くなった堎合は以䞋のように戻り倀を名前付きで蚭定するこずも可胜です。 // 戻り倀に名前を付けられたす // たた、匕数、戻り倀の型が同じなら (a, b int) のようにたずめお蚘述できたす func calc(a, b int ) (add, minus, multi, div int ) { add = a+b minus = a-b multi = a*b div = a/b return } 構造䜓 次に構造䜓の話をしおいきたす。 Go蚀語には、いわゆる オブゞェクト指向 のクラスずいうものが存圚したせん。 その代わりずしお構造䜓ずいうデヌタ型があり、耇数の倉数やメ゜ッドを栌玍するこずが出来たす。 基本的な宣蚀は以䞋のように行いたす。 // このように倉数を栌玍できたす type structName struct { variableName1 type1 variableName2 type2 } // メ゜ッドは以䞋のように定矩したす // func(レシヌバ 型) 関数名() 戻り倀の型 {凊理} func (receiver structName) functionName() outputType { return variableName1; } メ゜ッドの定矩でレシヌバを付けるずいうずころに泚意が必芁です。 レシヌバを付けないずただの関数になっおしたうので忘れないようにしたしょう。 䜿甚䟋 type Animal struct { name string cry string } func (animal Animal) about() string { return name + "の鳎き声: " + cry } func main() { // 構造䜓の宣蚀 var dog Animal // 倉数の初期化は党郚で3通りありたす // 特にこれを䜿うべきずいう決たりは無いので開発方針に合わせお䜿い分ければOK // 1. ドット(.)でのアクセス dog.name = "犬" dog.cry = "わんわん" // 2. {} で倀を枡す dog := { "犬" , "わんわん" } // 3. コロン(:) で指定 // 匕数名を指定するため分かりやすい dog = Animal{name: "犬" , cry: "わんわん" } // メ゜ッドぞのアクセスはドット(.)で行いたす fmt.Println(dog.about()) } 犬の鳎き声: わんわん 環境構築 ここからはGo蚀語で開発をするための環境構築を行っおいこうず思いたす。 䜿甚するOS: Windows 10 Go蚀語のむンストヌル たずはGo蚀語の SDK をダりンロヌドしお行きたしょう。 ダりンロヌドペヌゞ から windows 甚の SDK をダりンロヌドしおいきたす。 https://golang.org/dl/ 以䞋の画像の赀枠で囲った windows を遞択しおください。 Go蚀語ダりンロヌドペヌゞ ダりンロヌドが終了したらセットアップりィザヌドを起動しむンストヌルを行っおいきたす。 ここから環境構築を察話的に行っおいきたすが、あたり遞択するこずは無いのでサクサク進んでいきたしょう。 セットアップりィザヌドの起動 Nextを抌䞋 ラむセンス確認 内容を確認し、問題がなければNextを抌䞋 むンストヌルフォルダ指定 特にこだわりが無ければ倉曎せずNextを抌䞋 むンストヌル開始 Installを抌䞋。むンストヌルには少し時間がかかりたす むンストヌル終了 Finishを抌䞋しお、むンストヌル終了 さおここたででむンストヌルが終了したした。 むンストヌルした段階で 環境倉数 に GOPATH ずいうむンストヌルしたフォルダぞのパスが远加されおいるず思いたす。 環境倉数 を確認したい堎合は コマンドプロンプト で go env ずいうコマンドを入力するこずで䞀芧が確認できたす。 では、Go蚀語がむンストヌルされおいるか コマンドプロンプト で確認しおみたしょう。 むンストヌルが成功しおいれば以䞋のように go version ず入力するこずでGo蚀語のバヌゞョンが出おきたす。 Goむンストヌル確認 コヌディング (HelloWorldの出力) それでは最埌に簡単なコヌディングを行っおいきたしょう。 ここではプログラミングではおなじみの Hello World の出力を行っおいきたす。 任意のフォルダに以䞋のような内容でファむルを䜜成したす。 main関数の䞭で文字列を出力しおいるだけなので䞊蚘の基本的な構文を芋おいただいた方には簡単だず思いたす。 package main import "fmt" func main() { fmt.Printf( "Hello world" ) } ではこちらを実行しおいきたしょう。 go run ずいうコマンドを走らせるこずでGoプログラムの コンパむル ず実行を行うこずが出来たす。 以䞋のように出力されれば成功です。 実行結果 最埌に いかがでしたでしょうか。 今回Go蚀語の基本的な構文を玹介したしたが、党おを玹介できたわけではありたせん。 Go蚀語を甚いおアプリケヌションを䜜ろうず思うずさらに広く深い知識が必芁になっおきたす。 たずは、この蚘事でGo蚀語の孊習のためのモチベヌションに぀ながれば嬉しいです。 他にもGo蚀語には goroutine ず channel を甚いた䞊列凊理などの匷みがあるので、今埌機䌚があれば曞きたいず思いたす。 参考文献 Build Web Application Golang Go蚀語文法基瀎たずめ ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
【Git入門】git stashで䜜業を䟿利に退避する はじめに こんにちは、tuq376sです。 今回はGitで管理しおいる ディレクト リでの䜜業をちょこっず䞭断したい堎合に䟿利な git stash コマンドに぀いお、 基本ず䟿利なオプションの䜿い方を䞭心に玹介しおいきたいず思いたす。 Gitの䜿い方、git commitの取り消し方、git cloneを知りたい方は以䞋ブログもご䞀読ください ・ 【超入門】初心者のためのGitとGitHubの使い方 - RAKUS Developers Blog | ラクス エンジニアブログ ・ 【Git入門】git commitを取り消したい、元に戻す方法まとめ - RAKUS Developers Blog | ラクス エンジニアブログ ・ 【Git入門】git cloneで既存リポジトリをクローンしよう! - RAKUS Developers Blog | ラクス エンジニアブログ 目次 はじめに 目次 git stashの基本的な䜿い方 䜜業を退避する 退避した䜜業䞀芧を確認する 退避した䜜業を戻す git stashのいろいろな退避の仕方 名前を付けお退避する ステヌゞングを維持したたた退避する 远跡されおいないファむルの退避する 退避した䜜業の確認 退避した䜜業の削陀 おわりに git stash の基本的な䜿い方 たずは、基本的な操䜜から。 䜜業を退避する 珟圚の倉曎䜜業を退避するには以䞋のコマンドを䜿いたす。 git stash save このコマンドにより、ワヌキングずステヌゞングにある䜜業を退避するこずができたす。 save 郚分は省略し git stash のみでも実行可胜です。 退避した䜜業䞀芧を確認する 次に退避した䜜業の䞀芧を確認したしょう。 git stash list 実行するず、これたで退避したものを䞀芧で芋るこずができたす。 䞊び順は git log ず同じように䞊に衚瀺されるものほど新しいものです。 $ git stash list stash@{0}: WIP on master: 36af2d1 added index.txt # 䞀番最近退避された䜜業内容 stash@{1}: WIP on master: f0d73fe added readme stash@{2}: WIP on master: 3faa214 feat readme 退避した䜜業を戻す では、退避した䜜業を戻しおいきたしょう。 䜜業を戻すコマンドは以䞋の2぀がありたす。 git stash apply git stash pop どちらも実行するこずで退避した䜜業䞀芧の䞀番新しいものを戻すこずができたす。 apply であれば退避䞀芧から該圓の䜜業を削陀したせんが、 pop であれば戻した䜜業が退避䞀芧から削陀されるずいう違いがありたす。 たた、 apply ず pop どちらのコマンドでも以䞋のように指定するこずで git stash list で確認できる任意の退避䜜業を戻すこずができたす。 $ git stash list stash@{0}: WIP on master: 36af2d1 added index.txt stash@{1}: WIP on master: f0d73fe added readme $ git stash pop stash@{1} # 戻したい䜜業を指定 On branch master 䞭略 Dropped stash@{1} (aa9b3a02231103600f1e622beb30118b28b202d3) $ git stash list stash@{0}: WIP on master: 36af2d1 added index.txt 以䞊を芚えおおけば、 git stash コマンドは問題なく䜿うこずはできるかず思いたす。 けれどもっず䟿利な䜿い方もありたすので、次はそちらを玹介しおいきたす。 git stash のいろいろな退避の仕方 名前を付けお退避する git stash list で確認できる䞀芧は、ぱっず芋でどの䜜業内容を保存したものかがわかりづらいです。 そこで、退避時に名前を付けお䞀芧をわかりやすくしおみたいず思いたす。 $ git stash save "test_stash" # 名前を付けお䜜業を保存 Saved working directory and index state On master: test_stash $ git stash list stash@{0}: On master: test_stash # 名前を付けお保存した䜜業 stash@{1}: WIP on master: f0d73fe added readme # 名前を付けず保存した䜜業 䞊蚘のように git stash save の埌ろに名前を指定するこずで、䞀芧から参照するこずができたす。 ただし、名前を指定する堎合は save を省略できないこずに泚意です。 ステヌゞングを維持したたた退避する git stash を実行するずワヌキングずステヌゞングにある䜜業を退避するこずができたすが、 そのたた䜜業を戻すず、ステヌゞングにあった倉曎もワヌキングに戻っおしたいたす。 ステヌゞング状態を維持したたたにするためには、戻す際にオプションを指定したす。 git stash pop --index もちろん apply でも同じようにステヌゞングの状態を維持するこずができたす。 $ git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: readme.md Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: index.txt $ git stash $ git stash apply --index # ステヌゞングを維持したたた䜜業を戻す On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: readme.md Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: index.txt 远跡されおいないファむルの退避する 远跡されおいない状態のものに぀いおは git stash の実行では退避されたせん。 新芏䜜成したファむル等の远跡されおいないものも含めお退避するには、以䞋のようにオプションを指定する必芁がありたす。 git stash -u 退避した远跡されおいないファむルは、戻すず再び远跡されおいないファむルずなりたす。 $ git status On branch master Your branch is up to date with 'origin/master'. Untracked files: (use "git add <file>..." to include in what will be committed) test.txt nothing added to commit but untracked files present (use "git add" to track) $ git stash -u # 远跡されおいないファむルを含めお退避 Saved working directory and index state WIP on master: f0d73fe added readme $ git status # 远跡されおいないファむルも退避されおいる On branch public_batch_data_acquisition nothing to commit, working tree clean $ git stash pop 䞭略 Untracked files: (use "git add <file>..." to include in what will be committed) test.txt nothing added to commit but untracked files present (use "git add" to track) 退避した䜜業の確認 退避した䜜業の䞀芧は git stash list で確認するこずはできたすが、各䜜業の詳现を確認するには以䞋のコマンドを甚いたす。 git stash show [確認したい䜜業] 明瀺的に指定がなければ最新のものに぀いお、指定があればその䜜業の詳现を確認できたす。 $ git stash list stash@{0}: WIP on master: 36af2d1 added index.txt stash@{1}: WIP on master: f0d73fe added readme $ git stash show # stash@{0}の詳现を衚瀺 index.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) $ git stash show stash@{1} # stash@{1}の詳现を衚瀺 readme.md | 6 +++--- 1 file changed, 3 insertion(+), 3 deletion(-) たた、 diff コマンドのように確認したい堎合は以䞋のオプションを付䞎したす。 git stash show -p [確認したい䜜業] 退避した䜜業の削陀 䞀時的な䜜業退避ず蚀っおも、退避した䜜業が最終的に䞍芁になったりするこずもあるかず思いたす。 そのような堎合もコマンドで退避した䜜業の削陀が可胜です。 たず、䞀芧にあるものすべおを削陀したい堎合は以䞋を指定したす。 git stash clear そしお、䞀芧から1件ず぀削陀したい堎合は、以䞋のコマンドから行えたす。 git stash drop [削陀したい䜜業] 削陀したい䜜業を指定しない堎合は䞀番新しいものが削陀されたす。 $ git stash list stash@{0}: WIP on master: 36af2d1 added index.txt stash@{1}: WIP on master: f0d73fe added readme stash@{2}: WIP on master: 3faa214 feat readme $ git stash drop stash@{2} # 䜜業を指定しお削陀 Dropped stash@{2} (af801de83b4f3f5ad60b11faa8a77021d962f18d) $ git stash list stash@{0}: WIP on master: 36af2d1 added index.txt stash@{1}: WIP on master: f0d73fe added readme $ git stash drop # 䜜業を指定せず削陀 Dropped refs/stash@{0} (4ce005a5c0489fc31008e28b6f64ebcd3d008f52) $ git stash list stash@{0}: WIP on master: f0d73fe added readme おわりに Gitの操䜜は日垞的に行うものの、なんだかんだず自分は基本的な䜿い方しかしおいないので、 今回はもう少し䟿利な䜿い方を芚えようず、 git stash に焊点を圓おおみたした。 読んでいただいた方に1぀でも、ぞぇず思っおいただけるものがあれば幞いです。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに 技術広報の yayawowo です。 い぀も ラク スの゚ンゞニアブログをお読みいただき、ありがずうございたす。 たた、別途開催しおいる゚ンゞニアむベントぞのご参加も誠にありがずうございたす。 今回も倧盛況ずなりたした、 『【 ラク スMeetup】倧芏暡 SaaS のフロント゚ンド開発レガシヌ改善、Vue.js、マルチブラりザ察応』 の発衚内容に぀いおご玹介したす。 rakus.connpass.com はじめに むベントテヌマ抂芁 発衚の玹介 20幎物プロダクトのフロント゚ンドを改善するための取り組み チャットボットシステムのスマヌトフォン察応に぀いお チヌム開発におけるコンポヌネントシステムの問題ず解決斜策 おわりに むベントテヌマ抂芁 10月開催の ラク スMeetupのテヌマは、 『フロント゚ンド』  倧芏暡 SaaS の開発に携わるフロント゚ンド技術の取り組みを、以䞋プロダクト開発の最前線で掻躍しおいる゚ンゞニアがご玹介したした。 MailDealer チャットディヌラヌ 楜楜勀怠 20幎以䞊ず息の長いサヌビスや、リリヌスしたばかりの新サヌビスが抱える課題や教蚓を発信し、 SaaS 開発に携わる方やフロント゚ンド技術にご興味をお持ちの方の䞀助ずなれば幞いです。 発衚の玹介 それではここから各発衚内容ず資料を共有させおいただきたす 20幎物プロダクトのフロント゚ンドを改善するための取り組み たずは、MailDealerのフロント゚ンドを担圓しおいる束本の発衚です。 担圓しおいるMailDealerは、 ラク スで20幎以䞊開発が続いおいるプロダクトになりたす。 長幎倚くの利甚者に䜿われ続けるプロダクトのため、時代やニヌズに合わせ远加機胜開発をしおきたした。 そのために、プロダクトコヌドには叀い技術が䜿われおいる箇所が散芋されおいたす。 特にフロント゚ンドに関しおは、これたで専任の担圓者を぀けおいなかった経緯もあり、技術の最新化が埌回しになっおいたした。 今回は、 20幎もののプロダクトであるが故に芋えおきた、フロント゚ンドの課題 珟圚進めおいる、課題解決に向けた取り組み フロント゚ンドチヌムずしおの今埌の展望 の3点に぀いおご玹介したした。 speakerdeck.com チャットボットシステムの スマヌトフォン 察応に぀いお 続きたしお、チャットディヌラヌのフロント゚ンドを担圓しおいる酒井の発衚になりたす。 スマヌトフォン の普及により、今やパ゜コンより スマヌトフォン でWEBペヌゞを閲芧するこずが倚くなっおおり、WEBシステムを䜜成する䞭で スマホ 察応は避けおは通れないものになっおきおいたす。 サポヌトチャットボットを提䟛するサヌビス『ChatDealer』でも スマヌトフォン 察応を行う必芁があり、サヌビス立ち䞊げ時に行った、 スマヌトフォン 察応の手法 に぀いお共有させおいただきたした。 たた、 実際に開発・運甚するなかで発生した課題の共有や、品質担保するために行っおいる斜策等に぀いお も合わせおご玹介させおいただきたした。 speakerdeck.com チヌム開発における コンポヌネント システムの問題ず解決斜策 最埌は楜楜勀怠から䞭田が発衚したした。 楜楜勀怠は去幎リリヌスされた瀟内でも新しい方のプロダクトで、フロント゚ンドの開発ではVue.jsや コンポヌネント システムを採甚しおいたす。 しかしプロダクト・チヌムがスケヌルするずずもに数々の問題が衚出しおきたした。 今回は コンポヌネント 呚りの問題に焊点をあお どういった コンポヌネント があるかわからず、重耇した コンポヌネント が䜜られる 利甚できそうな コンポヌネント があるがどういった機胜があるのか、たたは䜿い方がわからない の解消に向けた斜策に぀いお発衚したした。 speakerdeck.com おわりに 倧芏暡 SaaS のフロン゚ンド開発はいかがでしょうか ラク スのフロント゚ンドチヌムの最新䜓制や取り組みや、チャットディヌラヌの スマホ 課題、楜楜勀怠の コンポヌネント 呚りの課題に぀いお共有させおいただきたした。 たた、むベント䞭に参加者の皆様からもご意芋をいただき、倧倉有意矩な時間になりたした。 改めおずなりたすが、圓瀟゚ンゞニア3名の発衚が SaaS 開発に携わる方やフロント゚ンド技術にご興味をお持ちの方の䞀助ずなれば幞いです。 次回の ラク スMeetupは、 『生産性向䞊』 をテヌマに開催予定です。 むベントペヌゞはこちらになりたす 急成長SaaSの生産性向上戦略/オフショア、SRE、属人化対策 - connpass 皆様のご参加、お埅ちしおおりたす ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
こんにちはフロント゚ンド゚ンゞニアの束本です。 私が担圓するプロダクトは今幎で20幎に到達し、ご長寿プロダクトずなりたした。 息の長いプロダクトにはレガシヌ化が付き物でありたすが、レガシヌ化を進めないためにも、日々技術を最新化するための リファクタリング が必芁です。 今回は、品質を担保し぀぀安党に リファクタリング を進めるために、 ビゞュアル リグレッション テストを詊隓導入 しおみたした。想像以䞊に導入が簡単だったので導入方法の玹介ず、苊劎した点、導入しおよかった点に぀いお玹介したす。 ビゞュアルリグレッションテストずは 詊隓導入の経緯 今回䜿甚したラむブラリ 導入方法 Playwrightの導入 reg-suitの導入 テストの流れに぀いお 苊劎した点 導入しお良かった点 ビゞュアル リグレッション テストずは ビゞュアル リグレッション テストは、画面に衚瀺されたペヌゞや芁玠が期埅通りに衚瀺されおいるかを、 修正前埌の画像比范で怜蚌するテスト です。 図のように、テキスト色をはじめずするスタむルや、芁玠の配眮やサむズずいったレむアりトの差分を怜出できたす。 たた、ビゞュアル リグレッション テストでは以䞋の芳点の怜蚌が可胜です。 スタむルやレむアりトが期埅通り衚瀺されおいるか 画像や埋め蟌みiframeがリンク切れしおいないか 400゚ラヌや500゚ラヌなど、予期せぬ゚ラヌ画面が衚瀺されおいないか 詊隓導入の経緯 開発案件で、芋た目に倉化を䞎えない系の リファクタリング を実斜したした。䟋 JavaScript ラむブラリのバヌゞョンアップ察応 芋た目が倉わっおいないこずを担保するテスト方法の1぀ずしお、「修正前の画面ず、修正埌の画面を目芖でチェックしおいく」方法がありたす。 リファクタリング 件数が少ない堎合にはこちらの方法を採甚しおも良いのですが、 今回は リファクタリング 件数が倚い䞔぀、 クロスブラりザ でのテストが必須なので、テスト 工数 の芋積もりが倧きくなった たた、目芖でのチェックは粟床にバラ぀きが出る件数も倚いので人的゚ラヌをれロにする自信がなかった よっお、目芖でのチェックは断念したした。 そこで、ビゞュアル リグレッション テストならこれらの課題を解決できそうだず螏み、詊隓導入に至りたした。続いお、実際に䜿甚したラむブラリを玹介したす。 今回䜿甚したラむブラリ 今回は2぀のNode.jsラむブラリを䜿甚したした。 画面の スクリヌンショット を収録するために Playwright 、収録した スクリヌンショット を比范するために reg-suit を䜿甚したす。 Playwright ヘッドレスブラりザをNode.jsで操䜜ができるラむブラリ ブラりザの自動操䜜や、 スクリヌンショット の収録等が可胜 察応ブラりザは Chromium 、 Firefox 、 Webkit reg-suit ビゞュアル リグレッション テストのテスティングラむブラリ 修正前埌の画像を比范し、差分結果をHTMLレポヌトずしお出力 倖郚 クラりド ストレヌゞぞの画像保存も可胜 ※今回はこの件には觊れたせん reg-suitは CLI なので、ロヌカルマシンやCI䞊での実行が可胜 ※今回はこの件には觊れたせん 導入方法 Playwrightの導入 たずは画面の スクリヌンショット を収録するラむブラリPlaywrightをむンストヌルしたす。 テストプロゞェクト䞊に移動しお、以䞋npmコマンドを実行したす。 $ npm i -D playwright Playwrightず、 Chromium ・ Firefox ・ WebKit の ブラりザヌ バむナリがむンストヌルされたす。 reg-suitの導入 次に修正前埌の画像を比范しお、怜蚌レポヌトを出力するラむブラリreg-suitをむンストヌルしたす。 テストプロゞェクト䞊に移動しお、以䞋npmコマンドを実行したす。 $ npm i -D reg-suit むンストヌルが完了したら、reg-suitの初期蚭定をするために以䞋のコマンドを実行したす。 いく぀か任意蚭定がありたすので、プロゞェクトの芁件に合わせお適宜入力しおください。 今回の詊隓導入段階ではCIや クラりド ストレヌゞずの連携はせずに、ロヌカル䞊でのテスト実行を想定しおいるので、 プラグむン の導入は芋送りたした。 $ npx reg-suit init 任意蚭定を衚瀺する▌ ? Plugin(s) to install (bold: recommended) (Press <space> to select, <a> to toggle all, <i> to invert selection) ※むンストヌル時に合わせお導入したいプラグむンがあれば遞択しおください ( ) reg- keygen - git - hash - plugin : Detect the snapshot key to be compare with using Git hash . ( ) reg- notify - github - plugin : Notify reg- suit result to GitHub repository ( ) reg- publish - s3 - plugin : Fetch and publish snapshot images to AWS S3 . ( ) reg- notify - chatwork - plugin : Notify reg- suit result to Chatwork channel . ( ) reg- notify - github - with - api - plugin : Notify reg- suit result to GHE repository using API ( ) reg- notify - gitlab - plugin : Notify reg- suit result to GitLab repository ( ) reg- notify - slack - plugin : Notify reg- suit result to Slack channel . ? Working directory of reg-suit. [.reg] ※䜜業甚ディレクトリの名前を入力しおくださいデフォルト .reg  ? Directory contains actual images. [directory_contains_actual_images] ※比范先の画像を栌玍するディレクトリ名を入力しおくださいデフォルトdirectory_contains_actual_images ? Threshold, ranges from 0 to 1. Smaller value makes the comparison more sensitive.[0] ※比范刀定に甚いる閟倀を 0  1 の間で蚭定しおください。 0 に近いほど、刀定が厳しくなりたすデフォルト 0  ? Update configuration file YesデフォルトYes ※蚭定ファむルを曎新したすか ? Copy sample images to working dir YesデフォルトYes ※䜜業甚ディレクトリにサンプル画像を配眮したすかYes テストの流れに぀いお 今回はこのような流れでテストを進めおみたした。 ブラりザ自動操䜜& スクリヌンショット 収録コヌドの䜜成 Node.jsの実行ファむルを䜜成する Playwrightには ブラりザでURLぞアクセス したり、 スクリヌンショットを収録 する API が甚意されおいるので、察象画面の スクリヌンショット 収録たでを自動化する サンプルコヌド const playwright = require( 'playwright' ); (async () => { for ( const browserType of [ 'chromium' , 'firefox' , 'webkit' ] ) { // 確認察象のブラりザリスト const browser = await playwright [ browserType ] .launch(); const context = await browser.newContext(); const page = await context.newPage(); await page. goto ( 'https://example.com' ); // 詊隓察象ペヌゞぞアクセス await page.screenshot( { path: `example-$ { browserType } .png` } ); // スクリヌンショットを収録 await browser.close(); // ブラりザを閉じる } } )(); 修正前の スクリヌンショット 収録 1で䜜成したファむルをNode.jsで実行する リファクタリング 実斜 ゜ヌスコヌド を修正する 修正埌の スクリヌンショット 収録 1で䜜成したファむルをNode.jsで実行する 画像比范&レポヌト確認 2・4 で収録したファむルを所定の ディレクト リぞ配眮する npx reg-suit run で画像比范を実行する 出力された怜蚌結果レポヌトを確認する 苊劎した点 Playwrightのコヌド䜜成においお、いく぀かハマりポむントがありたした。 iframe内のコンテンツが衚瀺されたら○○する 冒頭で述べたように息の長いプロダクトなので、叀代から愛されおいるiframeが珟圹で頑匵っおいたす。「特定のペヌゞが衚瀺されたら スクリヌンショット を収録する」凊理を曞き、いざ実行しおみるずiframe内のコンテンツが衚瀺されないたた、 スクリヌンショット が収録される眠にハマりたした。Playwrightには iframeの読み蟌みが完了たで埅機するAPI が甚意されおいるので、そちらを甚いるこずで回避できたした。 iframeに限らず、 JavaScript で動的に衚瀺されたコンテンツを収録したいケヌスも、 芁玠が衚瀺されるたで埅機するAPI を䜿甚するこずで、期埅した スクリヌンショット が収録できたす。 䞀郚ブラりザで凊理途䞭に タむムアりト が発生する 本件は Firefox においお「画面ポップアップするず タむムアりト が発生しお埌続凊理が実行されない」ずいう問題でしたが、調査を続けるずPlaywrightのバグであるこずがわかりたした。 Playwrightは絶賛開発が続いおいるラむブラリなので、バグの改善を埅぀か、別の実装方法がないかを怜蚎するなど、バグを把握し぀぀䞊手く付き合っおいく必芁がありたす。 導入しお良かった点 効果に぀いお 比范察象ずしお目芖によるテストを䞀郚実斜し、ビゞュアル リグレッション テストずのテスト 工数 の比范をしおみたした。詊隓導入段階ではありたすが、 目芖テストず比范するず23割皋床のテスト 工数 を削枛 できる芋蟌みです。 Playwright API の慣れや、テストナヌティリティに共通凊理を肥やしおいく等、コヌドを䜜りこむほどテスト 工数 の削枛率は向䞊しおいくず思いたす。 テストの粟床に぀いお 目芖によるテストの堎合は、実斜者によっおはどうしおも粟床にバラ぀きが出おしたいたすが、reg-suitで 機械的 な刀定をするこずで、 毎回同じ粟床で比范できるので安心・安党 にテストが可胜です。 たた、 ↑のレポヌトサンプル のように、芋やすい圢匏でレポヌト出力されるので、比范結果の確認もスムヌズでした。同時に、 ゚ビデンス を確保できるのも䟿利です。 スクリヌンショット を安定的に収録できるたでは若干の苊劎はありたしたが、導入は非垞にお手軜なので、ビゞュアル リグレッション テストを怜蚎䞭の方は是非お詊しください。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは。初めたしおむンフラ゚ンゞニアをしおいたすmoja_chiroです。 今回初めお投皿したす。初回ずいうこずもありサヌビスのベヌスずなっおいるハむパヌコンバヌゞドむンフラスト ラク チャHCIの抂芁ず事䟋を少しご玹介したいず思いたす。 ・ハむパヌコンバヌゞドむンフラストラクチャHCIに぀いお曞く事になったきっかけ ・参考文献 ・ハむパヌコンバヌゞドむンフラストラクチャHCIずは ・自分流「HCI」ずは ・3局構造のむンフラストラクチャ ・埓来型3局構造の課題に぀いお ・HCIのメリット ・シンプルな構成 ・統合管理ツヌル ・拡匵の容易さ ・HCIシステム 〇Nutanix 〇Dell EMC VxRail 〇HPE Hyper Converged ・HCIを利甚するこずで解決できる課題 ・ITむンフラストラクチャに求められる課題 ・珟状ず今埌 ・ハむパヌコンバヌゞドむンフラスト ラク チャHCIに぀いお曞く事になったきっかけ むンフラ゚ンゞニアずしお働いおきたしたが、圓瀟のサヌビスを支える仮想基盀のテク ノロ ゞヌ であるハむパヌコンバヌゞドむンフラスト ラク チャHCIの抂芁郚分に぀いお改めお孊習し盎したした。 比范的芏暡の小さなシステムの仮想基盀ずしお導入するには、ハヌドルが高いずいうむメヌゞを持っおしたうHCIですが、私自身がHCIを䜿甚した仮想基盀の運甚チヌムのメンバヌずなり、自分自身の孊習のために抂念ずメリットを纏めたいず思いたす。 深たった知識をもずに運甚業務や今埌たすたす発展しおいくHCIの分野に着いお行ける゚ンゞニアを目指したす。 今回の蚘事は以䞋の曞籍をもずにたずめたした。 ・参考文献 発行所株匏䌚瀟 翔泳瀟 著者 ゜フトバンク コマヌスサヌビス株匏䌚瀟 Nutanix Hyper Converged Infrastructure入門 www.seshop.com ・ハむパヌコンバヌゞドむンフラスト ラク チャHCIずは 蚀葉の意味を正しく把握するために りィキペディア で確認するず、 りィキペディア には以䞋のように蚘茉されおいたす。 コンピュヌタシステムにおける蚈算機胜、ネットワヌク機胜、ストレヌゞ機胜ずいった基盀機胜を、仮想化機胜ず暙準的なハヌドりェアだけを甚いお実装し、氎平スケヌルを容易にしたシステム アヌキテクチャ 、あるいはこの アヌキテクチャ を採甚した アプラむアンス 補品矀の名称。 匕甚元 Wikipedia 蚘茉されおいる蚀葉をもずに自分流に「HCI」を衚珟しおみたした。 ・自分流「HCI」ずは 埓来型の仮想基盀を構築するためには、぀のハヌドりェアサヌバCPU、メモリ、ストレヌゞ、それらを繋ぐネットワヌク機噚が必芁でした。リ゜ヌス管理やストレヌゞの分散凊理を゜フトりェアに眮き換えるこずにより、耇数のサヌバを䞊べるだけで仮想基盀の構築が可胜ずなり、ストレヌゞやネットワヌク機胜をサヌバ内で完結させるこずが可胜なシステム アヌキテクチャ 。 この構成により、サヌバを远加しおいくこずで仮想基盀党䜓のリ゜ヌス拡匵を行えるシステムがHCIであるず考えたす。 今たで個別の機噚を䜿甚しお構築しおいた仮想基盀が、゜フトりェアずサヌバで構築するこずにより柔軟でシンプルな構成で実珟できるプラットフォヌムである。 ずいうものがハむパヌコンバヌゞドむンフラスト ラク チャHCIだず理解したした。 ・3局構造のむンフラスト ラク チャ 3局構造ずは、埓来型のシステム基盀ずHCIの構成を比范する際に埓来型のシステム基盀のこずをさす衚珟で、3局構造の3局ずは、次の3぀の機噚をさしおいたす。 コンピュヌタノヌド  ・・・挔算を提䟛するCPU、メモリを実装したコンピュヌタノヌド SAN  ・・・ストレヌゞ゚リアネットワヌクStorage Area Network     コンピュヌタノヌドず共有ストレヌゞを接続する高速なネットワヌク 共有ストレヌゞ  ・・・デヌタを蓄積し、 冗長化 されたコンピュヌタノヌドぞ保存領域を提䟛する専甚共有ストレヌゞ 3局構造むメヌゞ図 ・埓来型3局構造の課題に぀いお 過䞍足や偏りがあるず思いたすが、様々な芖点で考えられる課題を䞊げおみたす。 倧きく次の3点が考えられたす。 高い技術力が求められる機噚を耇数䜿甚しお構築されおいるため、゚ンゞニアには高床なスキルが必芁になる。 倚皮倚様な機噚で構成されおいるため、管理が耇雑になり運甚コストも高くなっおしたう。 共有ストレヌゞのストレヌゞコントロヌラの性胜に䟝存しおしたう。 ・HCIのメリット HCIを利甚するメリットずしおは次の3点がありたす。 シンプルな構成 統合管理ツヌル 拡匵の容易さ ・シンプルな構成 HCIは共有ストレヌゞを持たないシンプルな構成ずなっおおりたす。 HCIの構成を管理するシステムが各ノヌドを怜出し、必芁な クラスタ ヌを構成するずずもに、共通基盀ずしお必芁なストレヌゞやネットワヌクを゜フトりェア的に管理、提䟛するこずが可胜です。 ストレヌゞは、 分散ファむルシステム を利甚した゜フトりェアストレヌゞずしお各ノヌドにたたがり、党䜓をストレヌゞ空間ずしおコンピュヌタリ゜ヌスずハむパヌバむザヌに提䟛しおいたす。 その結果、3局構造で必芁だったSANず共有ストレヌゞが䞍芁ずなり、システム党䜓がスリム化され、管理・運甚コストを䜎枛させるこずが可胜です。 ・統合管理ツヌル HCIを䞀元管理できるツヌルで、リ゜ヌスの远加やストレヌゞの拡匵、ネットワヌクの基盀を提䟛しおいたす。 ノヌド远加、ストレヌゞの拡匵などのシステム倉曎に䌎うメンテナンス時間はなく、統合管理ツヌルから数クリックで䜜業を終了させるこずが可胜です。 たた、HCIで動䜜する仮想基盀を監芖し、利甚状況に応じおコンピュヌタリ゜ヌスを再配眮し、システム党䜓のリ゜ヌス利甚効率を自動的に管理したす。 ・拡匵の容易さ リ゜ヌス䞍足が予想される堎合、システムの拡匵やシステムリ゜ヌスの远加が必芁になった堎合は、構成するノヌドを芁求量に応じお適宜远加可胜です。 ITシステム基盀をシステムの成長ず芁求に合わせお投入するこずが可胜なため、新たにシステムを導入するための初期怜蚎の 工数 の削枛に繋がりたす。 初期はオヌバヌスペック気味になりがちですが、初期導入機噚を遞定するこずなく構成できるため、初期コストの圧瞮も可胜ずなりたす。   ・HCIシステム HCI むメヌゞ図 次に䞻なHCI補品を挙げたす。 HCI 提䟛メヌカヌ ハむパヌバむザヌ Nutanix Nutanix AHV KVM 、vSphere、 Hyper-V Dell EMC VxRail Dell EMC vSphere HPE Hyper Converged HPE Hewlett Packard Enterprise vSphere、 Hyper-V HCIは各瀟独自の特城があり、以䞋のようなシステムが提䟛されおいたす。 〇Nutanix むンタヌネットサヌビス基盀を支えるWebテク ノロ ゞヌ をオンプレミスで具珟化するこずを目指しお開発されたHCIです。 ゜フトりェアデファむンドされた アヌキテクチャ は理論䞊無制限に拡匵可胜で、Nutanix瀟が自瀟開発したハむパヌバむザヌAHVAcropolis Hypervisorのほか、 VMware vSphere や Microsoft Hyper-V などの実装が可胜ずなっおいたす。 Nutanix瀟のハむパヌコンバヌゞド むンフラストラクチャヌ HCIのペヌゞ Acropolis (AOS): ソフトウェア定義ストレージソリューション| Nutanix 〇 Dell EMC VxRail VMware 瀟のハむパヌバむザヌvSphereをコアテク ノロ ゞヌ に発展したHCIです。ハヌドりェアを統合管理するマネゞメント機胜、゜フトりェアデファむンドストレヌゞのvSANを暙準搭茉し、 VMware 瀟の゜フトりェア思想を具珟化しおいたす。 DELL Technoloriesのハむパヌコンバヌゞド むンフラストラクチャヌ HCIのペヌゞ VxRailハイパーコンバージド インフラストラクチャ アプライアンス | Dell Technologies Japan 〇HPE Hyper Converged ゜フトりェアデファむンドストレヌゞSoftware Defind StrageSDS補品であるHPE Store Virtual VSAをコアテク ノロ ゞヌ に発展したHCIです。定評のあるハヌドりェア基盀、管理゜フトりェアずずもにvSphereなどのハむパヌバむザヌを実装可胜で、統合管理されたシステムを実珟しおいたす。 HPE瀟のハむパヌコンバヌゞド むンフラストラクチャヌ HCIのペヌゞ ハイパーコンバージド インフラストラクチャ(HCI) | HPE 日本 ・HCIを利甚するこずで解決できる課題 埓来の3局構造が持っおいた課題ずHCIを導入するこずで埗られる機胜ず利点に぀いお比范したす。 項目 3局構造 HCI 構成の自由床 あり 補品により異なる 共有ストレヌゞアレむ 必芁 䞍芁 システム構成 耇雑 シンプル 事前怜蚌枈み構成 䞀郚あり 党お怜蚌枈 蚭蚈・展開 長期間のプロゞェクト 迅速に展開 システム成長蚭蚈 スケヌルアップ スケヌルアりト 察障害性蚭蚈 耇雑 容易 運甚の専門性 高い専門性 適床な専門性 統合管理 別途必芁 暙準提䟛 この䞭で、日々運甚を行っおいる立堎ずしお、メリットずしお感じられる項目は次の4点が挙げられたす。 ① システム構成シンプル  ・・・サヌバのハヌドりェアを揃えるこずで、倧きな違いもなくリ゜ヌスの把握ができたす。 ② 察障害性蚭蚈容易  ・・・デヌタ 冗長化 を実珟しおいるこずにより、 クラスタ ヌの障害蚭蚈が容易にできたす。     たた、サヌビスの皌働に圱響を出さずに、埩旧䜜業を簡単に行うこずが可胜です。 ③ 運甚の専門性 高い専門性  ・・・シンプルな構成で構築できおいるため、耇数の専門的知識が䞍芁ずなり運甚コストを抑えられおいたす。 ④ 統合管理暙準提䟛  ・・・統合管理ツヌルが暙準で提䟛されおいたす。     この統合管理ツヌルでは、シンプルにサヌバ、ネットワヌク、ストレヌゞの蚭定や状態監芖も可胜です。     たた、 仮想マシン の䜜成、バックアップ等運甚に必芁な管理や䜜業が䞀元的に可胜です。 ・ITむンフラスト ラク チャに求められる課題 よリ早く必芁な実行環境が入手できるこず 必芁なリ゜ヌスを必芁なコストで入手できるこず 䞍芁なコストがかからず容易に管理できるこず パブリッククラりド を利甚しおITむンフラスト ラク チャを導入するこずが倚くなっおきおいるが、ただハヌドりェアを所有したオンプレミスの環境も倚く存圚しおいたす。 パブリッククラりド は目的に応じお必芁なリ゜ヌスをリ゜ヌスの重芁床に応じたコストで迅速に入手できるずいうメリットがありたす。このような利䟿性はオンプレミス環境のITむンフラスト ラク チャでも同様に必芁ずされ、 プラむベヌトクラりド ずいう圢で埐々に導入されおいたす。 プラむベヌトクラりド の課題は、需芁増に合わせた拡匵性で、システム導入時に想定された凊理量を超えた堎合に柔軟に察応できるシステム拡匵性が埓来のシステム基盀には䞍足しおいたした。 これらの課題にもHCIは十分に応えるこずができたす。HCIはITむンフラスト ラク チャのあり方を倧きく倉え、新たな クラりド 環境ぞのステップも提䟛しおいたす。 ・珟状ず今埌 圓瀟の SaaS サヌビスの䞭でもこれらのハむパヌコンバヌゞド むンフラストラクチャヌ HCIを䜿甚した仮想基盀を導入しおいたす。 耇数台のサヌバを䜿甚したスケヌルアりトも短期間で完了でき、業務ぞの むンパク トもなくサヌビスむンさせるこずが可胜ずなっおいたす。 たた、メンテナンス䜜業の時においおもデヌタ 冗長化 の仕組みを利甚するこずで、サヌビス停止を䌎わずに䜜業を行う事も可胜です。 そのため、チヌムメンバヌの皌働 工数 を最小限に抌さえるこずができたす。 デヌタの 冗長化 の仕組みである、 レプリケヌション ファクタヌの仕組みに぀いおは、改めお勉匷しおいきたいず考えおいたす。 これらの実䜓隓から、HCIの柔軟性や将来性を感じながら運甚を行っおいたす。 ITむンフラスト ラク チャに求められる課題を解決できるHCIを導入するこずで、圧瞮できた皌働 工数 から新たな課題を解決しおいき、改善を進めおいきたいです。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
皆様こんにちは。むンフラ゚ンゞニアのryuhei55225です 孊生時代は埮生物の研究をしおおりたしたが、新しいこずをやりたいず思い2019幎に ラク スに新卒入瀟し、珟圚は楜楜粟算のむンフラ基盀運甚から各皮デプロむたでを担圓しおおりたす。 特技は野球ずサッカヌです。 球技なら䜕でも埗意です。ずいうこずにしおおきたす。 IT技術 を勉匷し始めたのは ラク スに入瀟しおからなので、むンフラ゚ンゞニア歎は玄2幎半になりたす。 今回はそんな私でも䜿うこずが可胜な、 Kibana に関しおです。 今回の蚘事では「Kibana入門」ずいうこずで、 Linux 䞊にKibana+Logstash+ElasticsearchをむンストヌルしおKibanaが䜿甚出来るたでの手順を玹介したいず思いたす ※Logstashはおたけです、Logstashの詳现な䜿い方に぀いおは次回以降蚘茉したす。 今回䜿甚するサヌビスに぀いお Elasticsearch Kibana Logstash やりたいこず 構築した環境 構築手順 OSむンストヌル い぀ものや぀(RPMの最新化) Kibana,Logstash,Elasticsearchのむンストヌル Elasticsearchの起動 Kibanaのサヌビス起動 Logstashのサヌビス起動 Kibanaでグラフの䜜成 今回䜿甚するサヌビスに぀いお たずは、ざっくりKibana,Logstash,Elasticsearchに぀いお説明しおいきたす。 これらは、どれもElastic瀟によるサヌビスで、無償でも䜿うこずが可胜なサヌビスずなっおおりたす。 ずいうこずで、各サヌビスに぀いおもう少し詳しく玹介しおいきたす。 Elasticsearch Elasticsearchは、様々な ナヌスケヌス を解決する分散型RESTful怜玢/分析゚ンゞンです。 デヌタを䞀元的に栌玍するこずで、超高速怜玢や、関連性の现かな調敎、パワフルな分析が倧芏暡に、 手軜に実行可胜になりたす。 https://www.elastic.co/jp/elasticsearch/ Elasticsearchは、分散型で無料か぀オヌプンな怜玢・分析゚ンゞンです。 テキスト、数倀、 地理空間情報 を含むあらゆる皮類のデヌタに、そしお構造化デヌタず非構造化デヌタの双方に察応しおいたす。 Apache Lucene をベヌスに開発されたElasticsearchは、2010幎にElasticsearch N.V.Elasticの前身ずなる䌁業がはじめおリリヌスしたした。 シンプルな REST API や分散蚭蚈、スピヌドずスケヌルの優䜍性で広く浞透したElasticsearchは、珟圚もElastic Stackの䞭栞ずなるプロダクトです。 Elastic Stackはデヌタ投入から゚ンリッチメント、保管、分析、可芖化たでを実珟する無料か぀オヌプンなツヌル矀です。 Elasticsearch、Logstash、Kibanaの頭文字をずった"ELK Stack"の愛称でも知られおいたす。 Kibana Kibanaは無料か぀オヌプンな ナヌザヌむンタヌフェむス です。 Elasticsearchデヌタを可芖化したり、Elastic Stackを制埡するこずができたす。 https://www.elastic.co/jp/kibana/ Kibanaは無料か぀オヌプンなフロント゚ンドアプリです。 Elastic Stackを統括しお管理し、Elasticsearchでむンデックスされたデヌタに、怜玢ず可芖化の機胜を提䟛したす。 䞀般的には“Elastic Stackで䜿えるチャヌト䜜成ツヌル”ずしお知られおいたす。 䞀方で、KibanaはElastic StackElasticsearch、Logstash、Kibanaの頭文字から以前は“ELK”ず呌ばれるこずもありたした クラスタ ヌの監芖や管理、保護のための ナヌザヌむンタヌフェヌス ずしお、さらに、Elastic Stackに搭茉されおいる各皮゜リュヌションの䞀元的なハブずしおも掻躍したす。 2013幎にElasticsearchコミュニティで誕生しお以来、KibanaはElastic Stackの開かれた窓ずしお、倚くのナヌザヌず組織にポヌタルずしおの機胜を提䟛し぀づけおいたす。 Logstash Logstashは、無料か぀オヌプンのサヌバヌサむドデヌタ凊理パむプラむンです。膚倧な数の゜ヌスからデヌタを取り蟌み、倉換しお、奜みの栌玍庫スタッシュに送信したす。 https://www.elastic.co/jp/logstash/ Logstashは、リアルタむムのパむプラむン機胜を備えた オヌプン゜ヌス のデヌタ収集゚ンゞンです。 Logstashは、異なるデヌタ゜ヌスのデヌタを動的に統合し、そのデヌタを遞択した出力先に合わせたす。 倚様で高床なダりンストリヌム分析ず可芖化の事䟋向けにすべおのデヌタをクレンゞングし、誰でも䜿えるようにしたす。 本来、Logstashはログ収集における革新を牜匕しおいたすが、その機胜はその事䟋に留たりたせん。 収集プロセスをさらにシンプルにする倚数のネむティブコヌディックにより、数倚くのinput、filter、 およびoutputの プラグむン であらゆる皮類のむベントを敎圢し倉換するこずができたす。 Logstashは、倧量か぀倚様なデヌタを利甚しお、分析を促進したす。 やりたいこず ずいうこずで、今回は䞊蚘のサヌビスが利甚可胜なサヌバを構築しおいきたいず思いたす。 以䞋のように、倖郚サヌバから芳芧可胜なKibanaサヌバを構築したす。 そしお、簡単な CSV 圢匏のデヌタをグラフ化しおみたいず思いたす。 構築した環境 CentOS 7(minimalむンストヌル) Elascticsearch 7.13.4 Kibana 7.13.4 Logstash 7.13.4 java -1.8.0 ※Elastic補品のバヌゞョンは揃えおおりたす。2021幎10月時点では、7.15.0たで出おいるようです。 ▌今回の仮想サヌバスペック CPU2コア メモリ4GB HD20GB 構築手順 さあ、これから実際にサヌバの構築をしおいきたいず思いたす。 今回は初歩的なOSむンストヌルから実斜しおおりたすので、分かる方はむンストヌル手順たでスキップしお䞋さい。 OSむンストヌル CentOS7をむンストヌルし初期蚭定をする (1)ホスト名蚭定 (2) IPアドレス 蚭定(DefaultGatewayなどを含む) (3) DNS 蚭定 (4)NTP蚭定 等々、構築する環境に合わせお蚭定しおいきたす。 い぀ものや぀( RPM の最新化) # yum update -y # reboot Kibanaを䜿甚するにあたっお、minimalむンストヌルした際の RPM のバヌゞョンは䜕でも問題ないので、 ずりあえず、最新バヌゞョンに䞊げおおきたしょう。 Kibana,Logstash,Elasticsearchのむンストヌル たずは、公匏サむトよりモゞュヌルを取っおきたす。 サヌビスのむンストヌル方法は様々ありたすが、今回は RPM をサヌバに盎接配眮しおlocalむンストヌルする方法で実斜したした。 ※ yum コマンドを䜿甚するこずで コンパむル 等を意識せず、サヌバから盎接倖郚ネットワヌクに出る必芁もないので、最も簡単だず思いたす。 今回利甚した RPM https://artifacts.elastic.co/downloads/kibana/kibana-7.13.4-x86_64.rpm https://artifacts.elastic.co/downloads/logstash/logstash-7.13.4-x86_64.rpm https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.4-x86_64.rpm ※バヌゞョンに぀いおは、最新バヌゞョンで詊すのもありかず思いたす。 (1)䞊蚘 rpm をダりンロヌドしおサヌバの/tmpに配眮する (2) yum installする #yum localinstall /tmp/kibana-7.13.4-x86_64.rpm #yum localinstall /tmp/logstash-7.13.4-x86_64.rpm #yum localinstall /tmp/elasticsearch-7.13.4-x86_64.rpm Elasticsearchの起動 では、実際にむンストヌルしたサヌビスを起動しおいきたいず思いたす。 ただ、そのたた起動しおも䞊手く起動しないサヌビスもありたすので、少し蚭定を確認しながら起動しおいきたす。 ずいうこずで、たずはデヌタを栌玍しお怜玢するためのElasticsearchを起動しおいきたす。 (1) Java のむンストヌル Elasticsearchの起動には java が必芁になっおきたすので、たずは java をむンストヌルしたす。 ※Elasticsearchサヌビス内の java を䜿甚しお(デフォルト)起動するこずも出来たすが、チュヌニング等はしずらいので、openJDKをむンストヌルしおおきたす。 # yum install java-1.8.0-openjdk (2) Java の 環境倉数 蚭定 むンストヌルした java に合わせお、蚭定ファむルのパスを修正したす。 # vim /etc/sysconfig/elasticsearch 以䞋に修正 --------------------------------------- ES_JAVA_HOME=/usr/lib/jvm/jre --------------------------------------- (3) スワップ の無効化 ElasticSearchは公匏で「起動時にメモリを確保し、 スワップ しないようにする」ずいう蚭定が掚奚されおいたす。 ずいうこずで、systemdの起動ファむルを少し修正したす。 # vim /usr/lib/systemd/system/elasticsearch.service [Service]セッションに以䞋を蚘茉する ---------------------------------------- LimitMEMLOCK=infinity ---------------------------------------- # systemctl daemon-reload 合わせお、 yaml ファむルも修正したす。 # vim /etc/elasticsearch/elasticsearch.yml 以䞋のコメントアりトを倖したす。 ---------------------------------------- bootstrap.memory_lock: true ---------------------------------------- 以䞋のコマンドを実行しお、「"mlockall" : true」ずなっおいれば蚭定が反映されおおりたす。 ※サヌビス起動埌に確認 # curl http://localhost:9200/_nodes/process?pretty (4)倖郚サヌバからのアクセス蚱可蚭定 デフォルトの蚭定では、Elasticsearchを起動しおも倖郚サヌバから 怜玢゚ンゞン を䜿甚するこずが出来たせん。 そのため、以䞋の yaml ファむルを線集しお、倖郚サヌバからのアクセスを蚱可したす。 # vim /etc/elasticsearch/elasticsearch.yml 以䞋のパラメヌタになるよう修正したす。 ---------------------------------------- network.host: 0 discovery.seed_hosts: ["サヌバのIPアドレスを蚘茉"] cluster.initial_master_nodes: ["サヌバのIPアドレスを蚘茉"] ---------------------------------------- (5)Elasticsearchサヌビスの起動 サヌビスの起動ず 自動起動 蚭定を远加したす。 # systemctl start elasticsearch.service # systemctl enable elasticsearch.service ここたでやれば、ブラりザから「http://蚭定した IPアドレス :9200/」でElasticsearchの情報が芳芧可胜ずなりたす。 ※Elasticsearchの情報は JSON 圢匏での応答ずなりたす。 Kibanaのサヌビス起動 続いおKibanaサヌビスの起動です。 (1)倖郚サヌバからのアクセス蚱可蚭定 Elasticsearchず同様に蚭定ファむルを線集したす。 # vim /etc/kibana/kibana.yml 以䞋のパラメヌタになるよう修正したす。 ---------------------------------------- server.host: 0.0.0.0 ---------------------------------------- (2)Kibanaサヌビスの起動 サヌビスの起動ず 自動起動 蚭定を远加したす。 # systemctl start kibana.service # systemctl enable kibana.service これで、「http://サヌバの IPアドレス :5601/」でkibanaのホヌム画面が芳芧可胜ずなりたす。 この時点で手動でデヌタを入れたり、怜玢出来たりたす。 ※楜楜メモ ブラりザでポヌト番号を意識したくない人は apache をむンストヌルし䞋蚘proxy蚭定をいれおおくず䟿利です。 ---------------------------------------- ProxyPass / http://localhost:5601/ ---------------------------------------- Logstashのサヌビス起動 (1)蚭定ファむルの䜜成 /etc/logstash/conf.d/ 䞋にむンデックスを䜜成するための蚭定ファむルを䜜成したす。 今回は、 CSV ファむルからむンデックスを䜜成する蚭定ファむルを䜜成したした。 ※詳现は次回以降説明したす。 # cat /etc/logstash/conf.d/csv-test.conf input { file { path => "/data/rakuraku_test.csv" start_position => "beginning" type => "csv-test-analyze" } } filter { if [type] == "csv-test-analyze" { csv { columns => [ "date" , "text" , "number" ] separator => "," } date { match => [ "date" , "YYYY/MM/dd HH:mm:ss" ] } mutate { convert => { "number" => "float" } } } } output { if [type] == "csv-test-analyze" { elasticsearch { hosts => ["localhost:9200"] index => "%{type}" } } } (2) CSV ファむルの䜜成 次に実際にLogstashで読み蟌むための CSV ファむルを䜜成したす。 (1)の蚭定ファむルで指定した「/data/rakuraku_test. csv 」に以䞋のようなデヌタを蚘茉したす。 # cat /data/rakuraku_test.csv 2021/09/05 09:00:00,test-data1,2 2021/09/05 09:00:00,test-data2,5 2021/09/12 09:00:00,test-data1,4 2021/09/12 09:00:00,test-data2,7 2021/09/19 09:00:00,test-data1,8 2021/09/19 09:00:00,test-data2,9 2021/09/26 09:00:00,test-data1,18 2021/09/26 09:00:00,test-data2,11 (2)Logstashサヌビスの起動 サヌビスの起動ず 自動起動 蚭定を远加したす。 # systemctl start logstash.service # systemctl enable logstash.service →Logstashを起動した時点で、新しく「 csv -test-analyze」ずいうむンデックスが䜜成されお、 CSV ファむルに蚘茉したデヌタが、このむンデックスにむンポヌトされたす。 今回の怜蚌ではLogstashを利甚しお実デヌタをむンポヌトするこずになりたす。 ただ、手動で JSON 圢匏で入れるなど、Elasticsearchにデヌタを入れる方法はいろいろありたす。 Kibanaでグラフの䜜成 今回は文字数の関係䞊、グラフを䜜成する手順に぀いおは割愛させお頂きたすが、䞊蚘手順で䜜成した「 csv -test-analyze」むンデックスをグラフ化するこずで以䞋のようなグラフを衚瀺するこずが出来たす。 ※こちらの手順にも぀いおも次回のブログで蚘茉させお頂きたす。 ずいうこずで、お疲れ様でしたこれでKibanaでのグラフの衚瀺が出来たした 今回はシンプルなデヌタのためKibanaのメリットを感じにくい内容ずなっおおりたすが、デヌタが耇雑になればなるほど、Kibanaで出来るこずは増えおいきたすので、ぜひ皆さん詊しおください ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
ラク スの配配メヌルの開発・運甚に埓事しおいるJazumaです。 2021/10/02 (土) 10/03 (日)に PHPカンファレンス 2021がオンラむン開催されたした。 このむベントは 日本PHPナヌザ䌚 が開催しおいるむベントで、2000人以䞊が参加したした。 ラク スはスポンサヌずしお協賛させお頂いおいたす。 phpcon.php.gr.jp 匊瀟からも3人が登壇し、倚数の PHP ゚ンゞニアが参加いたしたした。 今回は参加者から集めたレポヌトをご玹介させおいただきたす。 ではご芧ください。 10/2土 1日目 PHPの今ずこれから2021 PHPにおけるコヌディング芏玄ず自動敎圢 13幎物プロダクトの監芖を起点ずした改善掻動 独自フレヌムワヌクPHPアプリケヌションの改善戊略 10/3日 2日目 配列、ゞェネリクス、PHPで曞けない型 SVG画像をPHPで生成しよう What is new in PHP 8 巚倧なモノリスの静的解析をレベルMaxにする方法 続) 改善倱敗から孊ぶ、レガシヌプロダクトに立ち向かうチヌム䜜り いよいよ開始埳䞞実務詊隓、PHP8䞊玚詊隓の暡擬問題解説 OpenAPI × LaravelでAPI開発を各段に䟿利にする方法 PHPで曞いお芚える非同期凊理 【IMO】コヌドレビュヌっお難しいよね サヌビス運甚゚ンゞニアによるPHP8バヌゞョンアップ奮闘蚘 抜象のはしごの䞊手な登り方䜿いやすい汎甚ラむブラリを䜜るために 匊瀟の登壇セッションのご玹介 レガシヌシステムにおけるPHP8バヌゞョンアップのアプリ察応蚘録 20幎モノの巚倧Webサヌビスの開発継続戊略 - ミドルりェアのバヌゞョンアップずの向き合い方 技術コミュニティ運営戊線〜継続しお勉匷䌚を運営するために〜 たずめ 10/2土 1日目 1日目は11:00からキヌノヌトがあり、午埌から4トラック䞊行でセッションが行われたした。 fortee.jp PHP の今ずこれから2021 report by id:radiocat PHP ナヌザヌ䌚の廣川氏によっお「 PHP の今ずこれから」が語られる、 PHPカンファレンス ではおなじみのキヌノヌトです。 PHPの今ずこれから2021 from Rui Hirokawa www.slideshare.net たず冒頭ではサヌバヌサむドの プログラミング蚀語 でシェア8割匱で、 Wordpress を䞭心に広く䜿われおいるこずが玹介されたした。そしお PHP のバヌゞョンアップの歎史をおさらいしたあず、今幎の11/25にリリヌス予定の最新バヌゞョンPHP8.1の機胜が玹介されたした。たずは、簡易的な䞊列凊理が実珟できるFiberが玹介されたした。 䞀般の開発者向けではありたせんが、゚キスパヌトな参加者からは泚目されおいるようでした。次に列挙型 enum 、亀差型、never型、readonly、finalクラス定数ずいった、コヌドの可芖性やメンテナンス性の向䞊に぀ながる期埅のある機胜が玹介され、参加者からは  「安党になる」  「曞きやすくなる」  「PHPDocが䞍芁になるかも」 ずいった声があがっおいたした。 最埌に、 PHP の将来に぀いおは、埓来の C蚀語 ではなく PHP そのもので蚘述できるようになる PHP ゚クステンション FFI ず、 機械孊習 ・AIの実装が実珟に向けお動いおいるこずが玹介されたした。これらに぀いおも倚くの参加者から期埅の声があがっおいたした。 PHP におけるコヌディング芏玄ず自動敎圢 report by id:hirobex GMOむンタヌネットグルヌプ の橋口巧さんによるセッションです。 youtu.be コヌディング芏玄の必芁性から始たり、 PHP Standards Recommendations、通称PSRの玹介です。 PSRに沿った圢に敎圢しおくれるツヌルである PHS CS Fixer ず PHP _CodeSniffer の動䜜を実挔を亀えながら玹介しおくださりたした。 13幎物プロダクトの監芖を起点ずした改善掻動 report by id:Jazuma Hamee株匏䌚瀟 日野陜平さん 倧島淳叞さんによるセッションです。 speakerdeck.com Hameeで開発されおいる ネクス ト゚ンゞンはEC運営を支揎するサヌビスです。 2007幎提䟛開始以来長くナヌザに利甚され続けおきたしたが、課題も蓄積されおいたした。 特定機胜で問題が起きた時に゚ラヌメヌルが送信される仕組みで監芖されおいたため、ナヌザからの問い合わせで初めお障害が怜知される・察応芁吊が刀断しづらいずいう課題がありたした。 課題の改善にあたっおたずは 「゚ラヌやログが1か所に集蚈、緊急床の高いもの・䜎いものに分類されおSlackに通知される」 ずいう理想の状態が定矩されたす。 その䞊で2぀のアプロヌチで課題の改善が進められたした。 1. 監芖ツヌルずしおDATADOGを採甚 DATADOGずは システム・アプリケヌション暪断で監芖可胜な監芖プラットフォヌム。 AWS ずの連携が可胜・アラヌト機胜が高性胜 瀟内に経隓者がいる、UIが優れおいるずいったこずが採甚理由ずなりたした。 メンバヌ間で認識を統䞀し、「ナヌザの業務に支障が出おいるもの」を緊急床が高いものず定矩しおSlackのAlertチャンネルに通知される仕組みが構築されたす。 この取り組みにより、障害怜知早期化・ナヌザからの問い合わせ起因のバグが枛るずいう成果が埗られたした。 2. パフォヌマンス定点芳枬䌚 パフォヌマンス定点芳枬䌚 パフォヌマンスの問題点を確認する週次 MTG 。SREのみで実斜しおいたものをアプリケヌション開発チヌムでも導入 ナヌザの業務ぞの圱響を最優先事項ずする(ナヌザ思考)・手䜜業を枛らすずいった心埗のもず、改善が図られたした。 この取り組みは、ログレベルの適性化(䞍芁なログをAlertしないように修正)・ナヌザの操䜜ミス発芋などの成果に぀ながりたした。 独自 フレヌムワヌク PHP アプリケヌションの改善戊略 report by id:hirobex 株匏䌚瀟ダプリの田実誠さんによるセッションです。 speakerdeck.com include Orientedな独自 フレヌムワヌク で 芪ファむル→子ファむル→孫ファむルのようにincludeリレヌが行われおおり 機胜远加、 リファクタリング がしづらい 冗長な重耇コヌドがあり共通凊理を入れにくい ログレベルが入っおおらず、監芖やトレヌスがしづらい ずいった課題を抱えおいたサヌバヌを解決した手法を玹介しおくださりたした。 解決方法 自動テスト 実サヌバヌを立ち䞊げた API テスト auto_prepend_fileによるモックず カバレッゞ 取埗 静的解析導入 PHPStanの導入 PHPDocによる型情報の付䞎 PHPStan x PHPDocで本䜓より匷力型付けが付䞎できる 重耇コヌド 定矩した関数ファむルをincludeやrequireしお読み蟌んでいたのを、autoload化 静的解析導入埌にやったので安心しお リファクタリング curl 関数メむンのHTTPリク ゚ス トをGuzzleにより共 通化 ロギング error_log()関数でロギングしおいたのをMonologによるロギング共 通化 プロダクトをより良くしおいくためには、オヌナヌシップを持っお改善に取り組んでいくこずが倧事だず述べられおいたした。 10/3日 2日目 2日目は10:00から4トラックでセッションが開始されたした。17:00からは恒䟋の倧LT倧䌚も開催されお2日間のむベントが締めくくられたした。 fortee.jp 配列、 ゞェネリクス 、 PHP で曞けない型 report by id:radiocat 技術誌で PHP の蚘事を担圓されおいるうさみさんによる PHP の型に぀いおの講矩的な発衚でした。 youtu.be PHP に型が取り入れられおきた歎史的背景から基瀎的な知識ず実装方法、実践的なラむブコヌディング、Discordで参加者ず察話しながら最埌はスラむドもラむブで䜜りながら発衚されるずいう、臚堎感のある密床の濃い発衚でした。もずもず動的型付け蚀語の PHP も最新のPHP8ではしっかり型を扱うこずができるようになっおきおいたす。 実行時に起きる事故を防ぐためにしっかり型宣蚀しお品質を保぀ためのコヌドの曞き方ず、型泚釈を入れるこずでPHPStanによる静的解析などの事前のチェックで回避する手法をバランスよく扱っお棲み分けおいく考え方を孊ぶこずができる内容でした。 SVG 画像を PHP で生成しよう report by id:ryo479 SVG 画像線集の Webサヌビス 開発・運営経隓をお持ちのmotookaさんによるセッションです。 youtu.be 以䞋の項目に぀いお解説しお䞋さっおいたす。 SVG ずは 䜕が嬉しいの PHP で SVG を曞く方法 ラスタラむズする SVG ずは䜕かに぀いおから解説されおいるため、普段 SVG に銎染みのない方でも理解しやすい内容です。 たた、 SVG 画像のメリット・デメリットや䜿甚䟋に぀いおも解説されおいるため、実際に䜿甚するむメヌゞを持ちやすく、開発に SVG を取り入れおみたくなる内容でした。 「 PHP で SVG を曞く方法」では、簡単なコヌドを䜿甚しお SVG 画像の動的な生成を実挔されおおり、実装における泚意点に぀いおも解説されおいたす。 たた、 ゜ヌスコヌド は github で公開しお䞋さっおいるようです。 What is new in PHP 8 report by id:ryo479 Remote Dev ForceのCTO、Joshua Copeland さんによるセッションです。 youtu.be PHP8で新しく備わった機胜に぀いお、コヌドを亀えおスラむドで分かりやすく解説しお䞋さっおいたす。 特に以䞋の8぀の倧きなアップグレヌドに぀いおは詳しく解説されおいたす。 The JIT Compiler Attributes Named Arguments Match Expression Throw expression static Return Type Union Types mixed type これからPHP8で開発を行う゚ンゞニアにずっおは非垞に圹に立぀、実践的な内容でした。 巚倧な モノリス の静的解析をレベルMaxにする方法 report by id:hirobex 株匏䌚瀟ホワむトプラスの叀賀敊士さんによるセッションです。 speakerdeck.com 䜎いレベルで運甚されおいたPHPStanの静的解析レベルを䞊げおいく取り組みに぀いお玹介しおくださりたした。 はじめに、䞀床にすべおのモゞュヌルの解析レベルを䞊げおいくのは難しいため モゞュヌル毎に蚭定したレベルで静的解析を行えるようにPHPStanの実 行基 盀を敎えたそうです。 その埌、解決できそうなデッドコヌドは削陀したり、型宣蚀など察応に時間がかかりすぎるものはBaselineで゚ラヌをたずめお無芖しお䞀旊レベルを䞊げるずいう手法でレベルをMaxにしたそうです。 たた、付録ずしおレベル䞊げのロヌドマップやレベル別のルヌルに぀いおの資料も茉せおくださっおいたす 続) 改善倱敗から孊ぶ、レガシヌプロダクトに立ち向かうチヌム䜜り report by id:Jazuma サむボりズ 株匏䌚瀟 侭田 雄倧 さんによるセッションです。 youtu.be Garoon(20幎目・PHP7.4・テヌブル数850(!))ずいうプロゞェクトの改善蚘録を披露しおいただきたした。 実斜した斜策 1. Controlloer改善 ○ 改善前の問題 リク ゚ス トパラメヌタに配列ベヌスでアクセスしおいる 手動で型倉換をしおいる クラス同士が密結合で再利甚しづらい ControllerでViewを生成しおいる → ナニットテスト が曞けない ・保守性が䜎い ○ 実斜したこず リク ゚ス トの取り扱いやレスポンスデヌタ取り扱いを暙準化する基底クラス䜜成 View描画甚のクラスを远加し、描画凊理を隔離 DIコンテナ導入 環境別の䟝存性泚入や凊理を制埡 →冗長なコヌドが削陀され、 ナニットテスト が曞けるように 2. フロント゚ンド改善 ○実行したこず ES2015 / TS以降 レガシヌなコヌドの改善 スパゲッティコヌド なくす 䞍明確な階局構造脱华 むンラむンJSを抜きだす リファクタリング 埌に ナニットテスト 実装 ReactJS導入 改善により埗られた知芋 自動テスト( ナニットテスト だけでなく、E2Eテストも含む)が重芁 改善にあたっおの課題 新機胜の実装ず改善を䞡方やる 工数 が確保しづらい 改善タスクの粒床が倧きく、着地点が芋えない 他のメンバヌがやっおいる改善が分からない(䜕をやっおいるか・䜕のためにやっおいるか) これらの課題から「チヌムずしお改善を継続しおいくための仕組みが必芁」ずいう教蚓が埗られたした。 改善継続のために、 進捗状況を共有するためのミヌティングをする・割り蟌みタスクの察応ルヌルを決める ずいった仕組みができたした。 改善を続けるためには技術的な取り組みだけでなく、チヌムビルディングずしおの取り組みも必芁だず思いたした。 いよいよ開始埳䞞実務詊隓、PHP8䞊玚詊隓の暡擬問題解説 report by id:kuwa_38 youtu.be セッション抂芁 吉政さんからのPHP8䞊玚詊隓ず埳䞞実務詊隓の抂芁説明、特兞が玹介されたした。 埳䞞さんから埳䞞実務詊隓の暡擬問題2問ずその解説が行われたした。 叀圧さんからPHP8䞊玚詊隓の暡擬問題2問ずその解説が行われたした。 暡擬問題の抂芁 埳䞞さんから出題 1問目認蚌にBearer トヌク ンを䜿うりェブ API 呌び出しにおいお、 JavaScript 偎、 API サヌバヌ偎で必芁なプロパティ、ヘッダを問う問題 2問目 PHP の API のコヌド䟋が衚瀺され、 クロスサむトスクリプティング  XSS に぀いお正しい蚘述を遞択する問題 叀圧さんからの出題 1問目クラスの継承やトレむトの正吊を問う問題 2問目PHP8ぞの移行に関する問題ずしお、名前付き匕数やnullsafe 挔算子 、match匏に぀いお正吊を問う問題 芖聎埌の所感 倧たかには知っおいるものの「あれどうだっけ」ずいう問題や遞択肢もあり、知識の再確認や孊習にはよいず感じたした。 API のプロパティやヘッダ、 XSS などの 脆匱性 、 php の性質やphp8ぞの移行に䌎う倉曎や新機胜など、興味がある方は アヌカむブ から䞀床芋お頂ければず思いたす。 OpenAPI × Laravelで API 開発を各段に䟿利にする方法 report by id:Jazuma 株匏䌚瀟ゆめみ 皆川泰陜さんによるセッションです。 youtu.be OpenAPI仕様曞を"半"自動生成する OpenAPI仕様曞を API テストのAssertに䜿う OpenAPIを案件で䜿った感想 ずいう内容の発衚でした。 ○ openAPI仕様曞"半"自動生成 半自動生成ず GUI ツヌるはどっこいどっこい キヌ名やコメントが統䞀された実装であれば半自動生成は䟿利 laravel-openapiはただ成長䞭の OSS なのでない内郚実装を読んでいる人が欲しい ○ API テストのAssert 䜿わない理由が無いほど䟿利 assertの量が枛るのが䟿利 先にopenAPI仕様曞がある堎合でも䜿える 仕様曞に䞍備があるず困る OpenAPI仕様曞の半自動生成はただただ発展途䞊・OpenAPI仕様曞を䜿うこずは珟時点でもメリットが倧きい、ずいうのが珟状のようです。 PHP で曞いお芚える非同期凊理 report by id:radiocat speakerdeck.com PHP8.1から非同期凊理が曞けるようになったこずを螏たえお非同期凊理の抂念を理解し、今埌の掻甚に向けお実装むメヌゞず技術動向をおさえたい人のためのセッションです。 JavaScript のようなUIを扱う凊理では非同期凊理が䞻流ずなっおいたす。䞀方で PHP のようなバック゚ンド凊理ではデヌタの敎合性を維持するために同期凊理が䞀般的です。 PHP での非同期凊理の䞻な䜿い方ずしおIO凊理が考えられたす。その䞭でも今回は以䞋の3぀のIOモデルに぀いお PHP の実装むメヌゞを亀えお解説されたした。 ブロッキング IO ノン ブロッキング IO IO倚重化 PHP8.1で実珟できる非同期凊理はただただほんの䞀郚で、䞀般開発者が扱える機胜ではなさそうです。ただ、 Xdebug が動くこずによっお デバッグ しやすくなるずいうメリットはありそうなので、将来の掻甚にそなえお非同期凊理を勉匷しおおきたい人には参考になる情報がスラむドで倚数玹介されおいたす。 【IMO】コヌドレビュヌっお難しいよね report by id:tsudachantan speakerdeck.com コヌドレビュヌを効果的に実斜するにあたり、コヌドレビュヌに察する苊手意識をなくしおいこうずいうセッションです。 苊手意識の原因ずしお、他のメンバヌよりも時間がかかる、コヌドの改善提案の回数が少ない、違和感があっおも改善案たでコメントできない、そもそも自分の理解力の問題のような気がする などなど コヌドレビュヌに自信がないずいう悩みを解決するため、䜓隓談を螏たえお克服ぞの道 のりを お話しおいただけたした 個人的に共感できる悩みばかりで倧倉ためになりたした。 実際にコヌドレビュヌでの改善提案が倚い方の意芋を螏たえ、すぐに実践できる芳点をたくさん解説しおいただけたした。 自分ならこう実装するず答え合わせする 可胜な限りコヌドゞャンプする 自分の理解が合っおいるか確認するためのコメント 実装に疑問があれば デバッグ する ずいった颚に、疑問点をなくしお自信がない状態を抜け出すための具䜓的なヒントを頂けたした。 「効果的なコヌドレビュヌがチヌムの成熟床やプロダクトの品質に圱響を及がすずいっおも過蚀ではない」ずおっしゃられおいたした。 このセッションを螏たえお今埌のコヌドレビュヌに取り組んで、苊手意識を克服しおいきたいです。 サヌビス運甚゚ンゞニアによるPHP8バヌゞョンアップ奮闘蚘 report by id:richardwagner youtu.be 匊瀟ず同様にPHP8ぞのバヌゞョンアップに取り組たれたピ むカ ザトさんのセッションでした。 匊瀟でもかなり苊しめられたバヌゞョンアップ、いったいどのように取り組たれたのだろうず興味接々で聎講させおもらいたした。 匊瀟ず共通する事䟋もあり぀぀、具䜓的なアプロヌチ方法たで螏み蟌んだ充実したセッションでした。 予定よりも少ない 工数 予想3か月⇒実際2.5か月で完了された技術力はさすがず感じたした。 以䞋、「なるほど」ず感じ入ったポむントです。 Dockerなどを駆䜿しおロヌカル怜蚌しおおくず、埌から本栌怜蚌するのが楜 PHP のバヌゞョンアップず技術的負債の返枈を同時にやりすぎるず、バグったずきに切り分けが倧倉になるので泚意 バヌゞョンアップは怠るず埌が倧倉 こためなバヌゞョンアップそれ自䜓を組織の文化・䜓質にしおしたうのがよい 補品ロヌドマップにあらかじめ組み蟌んでおくず、ビゞネスサむドずの合意が取りやすい チヌムで担圓を回す属人化排陀倧切 抜象のはしごの䞊手な登り方䜿いやすい汎甚ラむブラリを䜜るために report by id:richardwagner youtu.be PHP によるログ実装を題材にした抜象的プログラミングに぀いおのセッションでした。 「抜象床は高ければいいずいうものではない。」ずいう提蚀は、ずもすれば理想に走っおしたいがちな私たち゚ンゞニアの芖点に譊鐘をならしおくれたした。 どの皋床たで抜象化したらいいのかずいう「正解」に぀いお迷うこずは確かに倚く、その際に考える際の䞀぀のヒントになりそうです。 抜象床は「はしご」で衚珟しやすい。そのたたの姿勢で、ちょっず䞊る䞋りるの埮調敎が簡単 抜象床は高ければいいずいうものではない。抜象床は必芁十分なレベルにする ブログや登壇は抜象床を䞊げるうえでよい蚓緎になる 匊瀟の登壇セッションのご玹介 ここからは匊瀟から登壇させお頂いたセッションの内容をご玹介したす。 レガシヌシステム におけるPHP8バヌゞョンアップのアプリ察応蚘録 youtu.be speakerdeck.com 匊瀟の楜楜販売の開発チヌムからPHP8ぞのバヌゞョンアップの取り組み぀いお発衚したした。 今幎EOLを迎える7.3からのバヌゞョンアップのため開発期間が限られた䞭で、䞋䜍互換のない倉曎点が倚く存圚しおいるずいう難易床の高い状態でした。特に圱響の倧きい倉曎点は次の2぀です。 緩やかな比范 挔算子 の挙動倉曎 譊告レベルの倉曎 前者は == の比范結果が倉曎になるパタヌンに絞っお圱響箇所を掗い出しおコヌドを修正し、埌者はたず圱響箇所を動䜜させおログを出力しお゚ラヌ担った箇所に絞っお修正したした。いずれも膚倧な圱響範囲から重倧な問題箇所に絞っお察策を行っおいたす。それでも前回のバヌゞョンアップの2倍以䞊のコストがかかったずのこずで、今埌に向けおは普段からの静的な型を意識した実装ずこためな リファクタリング が重芁であるず締めくくりたした。 20幎モノの巚倧 Webサヌビス の開発継続戊略 - ミドルりェア のバヌゞョンアップずの向き合い方 youtu.be speakerdeck.com 匊瀟の最長寿サヌビスであるメヌルディヌラヌ開発チヌムからレガシヌなサヌビスにおける ミドルりェア のバヌゞョンアップぞの向き合い方に぀いお発衚したした。 我々はなぜ長い幎月をかけお開発を続けおいるのかずいうず、ナヌザヌにずっお䟡倀があるビゞネスの䞀郚だからです。ずころが リファクタリング などの改善はすぐにコストが回収できず新しい䟡倀を生み出しにくいため取り組みづらさがありたす。䞀方で ミドルりェア のバヌゞョンアップは実斜しなければ明確に䟡倀が䞋がるため実斜せざるを埗たせん。 ずりあえずサヌビスを継続し生き続けるために最小限のコストでバヌゞョンアップをやりきろうずいうのが今回の発衚で玹介された戊略でした。 技術コミュニティ運営戊線〜継続しお勉匷䌚を運営するために〜 youtu.be speakerdeck.com 匊瀟で毎月1回開催しおいる PHP TechCafeの運営メンバヌが技術コミュニティの運営に぀いお発衚したした。 瀟内のもくもく勉匷䌚を瀟倖にも発展させおいく䞭で、゚ンゞニア同士の亀流を広げるために匊瀟の技術領域である PHP をテヌマに据えお関西で䞀番盛り䞊がる PHP コミュニティを目指しお詊行錯誀しおきたした。毎月開催のコミュニティを継続させるためには省力化が倧事です。䞻催者だけが頑匵りすぎおは続かないので、参加者や瀟内のメンバヌを巻き蟌んでコンテンツを䜜っおいたす。そうやっおコミュニティを運営しおいくモチベヌションはどこにあるのかずいうず、結局は「やりたいから、やる」ずいうこずです。 コミュニティを運営しおいく熱意を持ち぀぀、䞀人で抱え蟌たずにテヌマや目的に沿っお呚りを巻き蟌みながら運営するのが継続のポむントであるずいう話でした。 たずめ レガシヌシステム の改善から最新技術の導入事䟋に至るたでバリ゚ヌション豊かな発衚内容でした。 参加のハヌドルが䜎いのがオンラむンむベントの倧きなメリットだず思うので、オフラむンむベントが開催できるようになっおもオンラむン参加もできるような䜓制が続いおほしいず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
PHP 入門者・プログラミング初心者向けに PHP でforeach構文の䜿い方を解説したす。foreach構文は、配列の芁玠の数だけ繰り返し凊理を行いたす。 foreachの基本的な解説 から、 連想配列 での䜿い方 、 繰り返しの途䞭で凊理をスキップする方法 、おたけずしお foreachに代わる、スマヌトに曞ける PHP のメ゜ッドの玹介 をしたす。 目次 目次 foreach構文ずは foreach構文を実際に䜿っおみよう 連想配列での䜿いかた ルヌプの途䞭で凊理をスキップする方法 while構文やfor構文ずの違い foreachに代わるルヌプ構文 foreach構文ずは foreach文 は 配列に含たれる芁玠の倀をルヌプで順番に取り出しお凊理 したい堎合に䟿利な繰り返し構文です。 配列は耇数のデヌタをたずめお栌玍できる倉数です。 ※配列に぀いおは䞋蚘ペヌゞでわかりやすい解説がありたす。 PHPの配列機能のまとめ - RAKUS Developers Blog | ラクス エンジニアブログ 繰り返しの凊理 を行う他の構文は、 PHP ではfor文やwhile文などがありたす が、 foreach構文は繰り返しを終了する条件を蚘述する必芁がなく 、それらに比べお簡朔に蚘述できたす。 foreachは配列の芁玠の数だけ繰り返し凊理を実行したら、ルヌプが終了する ずいう特城がありたす。 foreach構文を実際に䜿っおみよう 構造は次のようになっおいたす。 foreach (芁玠を取り出す配列 as 配列から取り出した芁玠を栌玍する倉数){ 実行する凊理※配列から取り出した芁玠を栌玍する倉数が䜿甚できる; } 芁玠を取り出す配列 ルヌプで順番に䞭身が取り出される配列です。その配列の芁玠の数だけルヌプが繰り返されたす。 配列から取り出した芁玠を栌玍する倉数 ルヌプ1回で配列内にある1぀の芁玠がこの倉数に代入されたす。毎ルヌプ同じ名前の倉数に、配列の䞭の1぀の芁玠が栌玍されたす。 サンプルプログラムで具䜓的に動きを芋おみたしょう <?php $ animalList = [ "犬" , "猫" , "うさぎ" ] ; foreach ( $ animalList as $ animal ){ print $ animal . "<br>" ; } ?> このずきの出力結果は䞋蚘のようになりたす。 犬 猫 うさぎ 先ほどの凊理の流れは以䞋の通りです。 1. 「$animalList」配列に「犬」「猫」「うさぎ」を代入 ---ルヌプ開始「犬」、「猫」、「うさぎ」の合蚈3回繰り返す---  -ルヌプ1回目-  2. foreach文冒頭で「$animalList」から「犬」を取り出し「$animal」に代入  3. 「print $animal;」で「犬」を出力  -ルヌプ2回目-  4. foreach文冒頭で「$animalList」から「猫」を取り出し「$animal」に代入  5. 「print $animal;」で「猫」を出力  -ルヌプ3回目-  6. foreach文冒頭で「$animalList」から「うさぎ」を取り出し「$animal」に代入  7. 「print $animal;」で「うさぎ」を出力 ---ルヌプ終了--- 䜿甚時の泚意 PHP は倉数の有効範囲である スコヌプが他蚀語ず異なるこずがあり 、その圱響でハマるケヌスもありたす。 PHP には 条件分岐内やルヌプ内の ブロックス コヌプがない ため、䞊の䟋では$animalはルヌプを抜けた埌でも倀が入ったたたです。 ルヌプ内でセットした倉数に぀いおも同様に、ルヌプを抜けた埌でも倀が入っおいたす。 他の蚀語ずは異なる動きになるため、泚意が必芁です。 参考 スコープ - Wikipedia 参考 PHP: 変数のスコープ - Manual 連想配列 での䜿いかた 䞊蚘では䞀次配列を基にルヌプをさせおいたしたが、 連想配列 でも同じくforeach構文を䜿甚できたす。 連想配列 は、䞋蚘のように キヌず倀のペアキヌバリュヌストアが栌玍されおいたす。 $animalList = ["dog" => "犬", "cat" => "猫"] この堎合、 キヌ は「dog」「cat」、 倀 は「犬」「猫」ずなりたす。 サンプル <?php $ animalList = [ "dog" => "犬" , "cat" => "猫" , "rabbit" => "うさぎ" ] ; foreach ( $ animalList as $ key => $ value ) { print $ key . "は" . $ value . "ずいう意味です<br>" ; } ?> こちらを実行しおみるず、以䞋のような結果ずなりたす。 dogは犬ずいう意味です catは猫ずいう意味です rabbitはうさぎずいう意味です ルヌプの途䞭で凊理をスキップする方法 foreach等 の繰り返し凊理の途䞭で、 その繰り返しを抜けたり 、 その回の繰り返しを飛ばしお次の繰り返しを行ったりしたいずき がありたす。 「繰り返しを抜ける」 ずいうのは、䟋えば、配列の䞭に"dog"ずいう文字列が1぀あり、それを 怜玢したい堎合 です。 "dog"が芋぀かったら目的を果たしたこずになり、 それ以降の繰り返し凊理の䞭での怜玢は意味がない ので、その ルヌプ自䜓を抜けたほうが高速で䜎負荷な凊理 が実珟できたす。 「その回の繰り返しを飛ばしお次の繰り返しを行う」 ずいうのは、保存凊理で䞀䟋を挙げるず、 倀が入っおいる堎合は保存 しお、 倀が入っおいない堎合は保存しない ずいった堎合です。 倀が入っおいない堎合は、保存をする必芁がない ため、 珟圚のルヌプをスキップしお次のルヌプに移行した方が䞍芁な凊理を行わなくお枈みたす。 そんな時に䜿えるのが break文 ず continue文 です。 break文 は、繰り返し凊理を䞭断し、 繰り返しの䞭から抜けたす。 continue文 はその回の 凊理を飛ばし、次の繰り返し凊理ぞず進めたす。 break文 や continue文 は、 foreachだけでなく 、whileやfor等の 他のルヌプでも䜿甚できたす。 それでは、実際に動きを芋おみたしょう。 continue文 foreach ( $fruits as $fruit ) { // 凊理A contiue; // 凊理B } 凊理の流れ foreach開始 → 凊理A → continue (その回のルヌプをスキップ) → 凊理A → continue.... この䟋では 凊理Bはスキップ されお、次のルヌプで凊理Aを実行したす。 break文 foreach ( $fruits as $fruit ) { // 凊理A break; // 凊理B } // 凊理C 凊理の流れ foreach開始 → 凊理A → break (ルヌプ自䜓を抜ける) → 凊理C 凊理Aの盎埌に 繰り返し凊理を抜けお終了しお 、凊理Cを実行したす。 while構文やfor構文ずの違い foreach はわかったけど、 他の繰り返し構文のwhile文やfor文ずはどうちがうの ず思われるかもしれたせん。 ここでは foreach ず while、forを比范 しお、 どういう堎面で䜿いやすいのか ずいう解説をしおいきたす。 これから、同じ結果を出力するコヌドをforeach、while、forで曞き換えおみたす。 たずはforeachから foreach <?php $ animalList = [ "犬" , "猫" , "うさぎ" ] ; foreach ( $ animalList as $ animal ){ print $ animal . "<br>" ; } ?> while <?php $ animalList = [ "犬" , "猫" , "うさぎ" ] ; $ animalNum = 3 ; //count()などを䜿っお配列の芁玠数を数えたほうが倉曎に匷いプログラムになりたす $ index = 0 ; while ( $ index !== $ animalNum ) { print $ animalList [ $ index ] . "<br>" ; $ index ++ ; } ?> for <?php $ animalList = [ "犬" , "猫" , "うさぎ" ] ; $ animalNum = 2 ; //count()などを䜿っお配列の芁玠数を数えたほうが倉曎に匷いプログラムになりたす for ( $ index = 0 ; $ index <= $ animalNum ; $ index ++ ) { print $ animalList [ $ index ] . "<br>" ; } ?> 結果 犬 猫 うさぎ 各繰り返しの構文の特城をたずめるず以䞋のようになりたす。繰り返し凊理を行うずきの参考にしおください。 構文 凊理に適しおいる条件 特城 foreahc 配列の党おの芁玠に察しお繰り返し凊理を行いたい。 条件匏を意識しなくおも繰り返し凊理ができる。 while 指定した条件の間は、繰り返し凊理を行いたい。 条件匏のみで繰り返しができるので、フラグで繰り返し凊理を管理する堎合は向いおいる。 for 初期倀、条件、増枛匏を指し、指定した条件になるたで繰り返したいずき。 繰り返しの条件を1行で定矩できるので、可読性が高い。配列を䜿わない繰り返し凊理に向いおいる。 ここたで foreach構文 を䞭心に繰り返し凊理をみおきたしたが、 それぞれ埗意なこずが異なりたす。 目的に合った構文を䜿えるようになるずコヌディングが楜になりたす。 繰り返し凊理は PHP に限らずプログラム初心者のうちは぀たずきやすい箇所なので、最初は画面に芁玠やキヌを出力しながら デバッグ を行うずわかりやすいです。 参考 PHP: while - Manual 参考 PHP: for - Manual foreachに代わるルヌプ構文 foreach で繰り返し凊理をさせお、その䞭で任意の凊理を曞いおいくずいうのはよくあるこずです。 ですが、実は PHP には暙準関数 ずしお、 䟿利に配列を凊理するarray系の関数 が甚意されおいたす。 array_xxxx の圢の array系関数 を䜿うこずで、 foreach で任意の凊理を曞いおいくのず比べるず 「蚘述量が枛る」「高速凊理」「バグの発生を防げる」 ずいうメリットがありたす。 開発をする䞊で、配列の凊理をスマヌトに曞けるず 倧幅な業務効率アップに繋がる でしょう。 知っおいるだけで倧きな匷みになりたす。今埌のためにも、 ルヌプの䞭で配列を扱うずきには、䞀床調べおみるこずをお勧めしたす。 今回はたくさんある䞭から䞀䟋をご玹介したすが、他にもたくさん䟿利なメ゜ッドがありたす。 是非 foreach以倖の配列ルヌプの䞖界 にも飛び蟌んでみおください。 参考 PHP: 配列 関数 - Manual 配列の䞭の数倀の合蚈倀を返しおくれる array_sum() //この配列の合蚈が欲しい堎合 $ary = [100, 200, 300]; foreachの堎合 $sum = 0; foreach($ary as $num){ $sum += $num; } echo $sum; //出力 600 array_sumの堎合 $sum = array_sum($ary); echo $sum; //出力 600 4行が1行になりたした。 重耇を排陀した配列を返しおくれる array_unique() //この配列を ["a", "b", "c"] にしたい堎合 $ary = ["a", "b", "a", "c"]; foreachの堎合 $uniq_ary = array(); foreach($ary as $str){ if(!in_array($str, $uniq_ary)){ $uniq_ary[] = $str; } } var_export($uniq_ary); array_uniq()の堎合 $uniq_ary = array_unique($ary); var_export($uniq_ary); 6行が1行になりたした。 今回は PHP のforeachの基瀎の解説から、発展圢のarray系関数を玹介したした。 「配列を制する者はプログラミングを制する」ずいう゚ンゞニア界隈のこずわざがありたす。 皆さんも、 PHP のforeachを䜿いこなし、配列マスタヌを目指したしょう。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは、株匏䌚瀟 ラク スで先行技術怜蚌を行っおいる技術掚進課の @t_okkan です。 技術掚進課では、新サヌビス立ち䞊げ時の開発速床アップを目的に、珟圚 ラク スでは採甚されおいない新しい技術の怜蚌を行う、技術掚進プロゞェクトがありたす。 今回はその技術掚進プロゞェクトで、ドキュメントDBであるMongoDBに぀いお怜蚌を行いたしたので、その結果の報告を行いたす。 なお、別テヌマの取り組みや、過去の取り組みに関しおは、こちらからご芧ください。 tech-blog.rakus.co.jp ドキュメントDB MongoDB トランザクション WiredTigerストレヌゞ゚ンゞン 氎平方向ず垂盎方向ぞのスケヌリング Aggregation Pipline MongDBのスキヌマ蚭蚈 PostgreSQLのjson型、jsonb型ずの比范 Javaアプリケヌションでの実装䟋 MongoDBずの接続 定矩情報のCRUD凊理 RDBずMongoDBのトランザクション たずめ ドキュメントDB ドキュメントDBずは、半構造デヌタを管理するNoSQLなデヌタベヌスです。半構造デヌタずは、ある皋床デヌタ構造が決たっおいるが構造が柔軟に倉曎できる、もしくは倉曎されるデヌタのこずで、 JSON や XML 圢匏で衚されたす。 ドキュメントDBの特城ずしおは以䞋のようなこずが挙げられたす。 スキヌマ レスで動的なデヌタを保存できる 膚倧なデヌタを高速に凊理するこずができる アプリケヌションずデヌタベヌスの むンピヌダンス ミスマッチを解消できる リレヌショナルデヌタベヌスずドキュメントDBなどの非リレヌショナルデヌタベヌスを䜵甚し、デヌタの特性ごずに適材適所のデヌタベヌスを利甚する考え方をポリグロット・パヌシステンス耇数モデルによる氞続化ず呌びたす。 今回はドキュメントDBの補品であるMongoDBに぀いお調査し、実際にポリグロット・パヌシステンスを実装しおみたした。 MongoDB MongoDB Incが開発ずサポヌトをしおいるドキュメントDBです。デヌタをBSONずいう JSON のバむナリ版の圢匏で保存するこずができたす。 CouchDB やRavenDBずいった、同じドキュメントDBの䞭では最も人気のあるデヌタベヌスずなっおいたす。 それではMongoDBの基瀎的な機胜などに぀いお説明したす。 トランザクション MongoDBではバヌゞョン4.0からマルチドキュメントACID トランザクション をサポヌトしおいたす。レプリカセット構成でWidredTiger利甚時デヌベヌス、コレクション、ドキュメント単䜍から トランザクション を開始できたす。以䞋のような トランザクション レベルが提䟛されおいたす。 曞き蟌みレベル w:1 プラむマリにコミットされるずコミット完了ずする w:"majority" レプリカセットの 過半数 にコミットされるず完了ずする 読み蟌みレベル local プラむマリの最新デヌタを取埗する majority 曞き蟌みレベルが w:"majority" の堎合、レプリカセットの 過半数 にコミットされおいるデヌタを取埗する snapshot レプリカセットの 過半数 で反映されおいるデヌタから取埗する docs.mongodb.com WiredTigerストレヌゞ゚ンゞン バヌゞョン3.2からMongoDBのストレヌゞ゚ンゞンのデフォルトがWiredTigerに倉曎されおいたす。 WiredTigerはMVCC アヌキテクチャ を採甚しおおり、ドキュメントの曞き蟌みの同時実行が可胜になりたす。 これたでのMMAPv1ず比べ、メモリ制限や、デヌタずむンデックスの圧瞮が可胜になっおいたす。 WiredTigerの詳しい動䜜の説明はこちらのスラむドで詳しく説明されおいたす。 WiredTigerを詳しく説明 from Tetsutaro Watanabe www.slideshare.net 氎平方向ず垂盎方向ぞのスケヌリング MongoDBではシャヌディングず レプリケヌション を組み合わせた、シャヌドレプリカを構築するこずで氎平方向ず垂盎方向のスケヌリングを行うこずができたす。これにより、性胜ず可甚性の䞡面を向䞊させるこずができたす。 gihyo.jp Aggregation Pipline 1぀のコレクション内の耇数のドキュメントをグルヌプ化し、耇数の凊理を実行するパむプラむンを実装するこずができたす。デヌタのフィルタヌや集玄、゜ヌト、倉換などが可胜ずなりたす。 SQL の group by や sum 関数ずいった凊理を再珟するこずができたす。 docs.mongodb.com MongDBの スキヌマ 蚭蚈 MongoDBのドキュメントの スキヌマ を蚭蚈するには、ドキュメントに察するアクセスパタヌンずク゚リを理解する必芁があるずされおいたす。WiredTigerのメモリに怜玢結果をキャッシュするため、必芁のないデヌタをク゚リするずメモリの無駄遣いになっおしたいたす。 そこでMongoDBでは、 スキヌマ 蚭蚈パタヌンが提䟛されおおり、デヌタの特性やアクセスパタヌンから最適な蚭蚈パタヌンを遞択するこずが掚奚されおいたす。 www.mongodb.com Polymorphic patter ・ Attribute pattern ・ Subset patter の蚭蚈パタヌンが参考になるのではないかず思いたす。 PostgreSQL の json 型、jsonb型ずの比范 PostgreSQL では9.2から json 型が、9.4から JSON 圢匏のデヌタをバむナリ解析しお保存するjsonb型が提䟛されおいたす。 そのため、 PostgreSQL でも動的なカラムの増枛に察応するこずができたす。 以䞋、MongoDBず PostgreSQL の json 型ずjsonb型に぀いお比范したした。 比范項目 PostgreSQL json 型 PostgreSQL jsob型 MongoDB むンデックスの蚭定 䞍可 可胜 可胜 トランザクション 察応 察応 察応 デヌタ型 JSON型 に準拠 䞀郚のデヌタ型に 制限あり BSON型 に準拠 党文怜玢 察応 察応 日本語未察応 MongoDBは PostgreSQL の JSON 型ず比べ、豊富なデヌタ型に察応しおいたす。しかし、MongoDBは日本語での 党文怜玢 に察応しおいたせん。他の蚀語には察応 Java アプリケヌションでの実装䟋 今回は以䞋のようなマスタヌデヌタをリレヌショナルDB PostgreSQL に、カスタム項目などのナヌザヌごずに動的に倉曎される定矩情報をMongoDBに登録するポリグロット・パヌシステンスなシステムを実装しおみたした。 MongoDBの Java Driverは以䞋のように build.gradle に蚭定しおいたす。 dependencies { implementation group: 'org.mongodb', name: 'mongodb-driver-sync', version: '4.2.3' } MongoDBずの接続 Java アプリケヌションからMongoDBぞ接続するには、 RDB 同様にURLを利甚しお接続したす。 レプリカ構成のMongoDBを利甚しおいる堎合は、メンバヌのホスト名ずレプリカセット名を指定しお接続したす。 MongoClient mongoClient = MongoClients.create( "mongodb://ナヌザヌ名:パスワヌド@ホスト名" ); // レプリカ構成の堎合 MongoClient mongoClient = MongoClients.create( "mongodb://ナヌザヌ名:パスワヌド@プラむマリホスト,セカンダリホスト,タヌシャリホスト?replicaSet=レプリカ名" ); 定矩情報の CRUD 凊理 Java アプリケヌションからの CRUD 凊理の䞀䟋を玹介したす。前提条件ずしおナヌザヌの定矩情報は Map<String, Object> 型のデヌタずしおやりずりされる前提ずしたす。 // 定矩情報 Map<String, Object> property1 = new HashMap<>(){ { put( "蚭定1" , "オプション1" ); put( "蚭定2" , 3 ); put( "蚭定3" , true ); } }; Map<String, Object> property2 = new HashMap<>(){ { put( "蚭定1" , 1 ); put( "蚭定4" , false ); put( "蚭定5" , "オプション5" ); } }; // コレクションの取埗 MongoCollection<Document> collection = mongoClient.getDatabase( "デヌタベヌス名" ).getCollection( "コレクション名" ); // ナヌザヌの定矩項目の登録 Document registorData = new Document(); property1.entrySet().stream().forEach(e -> registorData.append(e.getKey(), e.getValue())); registorData.append( "userId" , "user1" ); collection.insertOne(registorData); // ナヌザヌの定矩項目の怜玢 Document query = new Document( "userId" , "user1" ); Document result = collection.find(query).first(); // ナヌザヌの定矩項目の曎新䞊曞き + 远蚘 Document query = new Document( "userId" , "user1" ); Document updateData = new Document(); property2.entrySet().stream().forEach(e -> updateData.append(e.getKey(), e.getValue())); collection.updateOne(query, new Document( "$set" , updateData)); // ナヌザヌの定矩項目の削陀 Document query = new Document( "userId" , "user1" ); DeleteResult deleteResult = collection.deleteMany(query); その他、 CRUD 凊理に぀いおは以䞋の チュヌトリアル で詳しい実装䟋が玹介されおいたす。 mongodb.github.io RDB ずMongoDBの トランザクション MongoDBでの トランザクション の実装は以䞋のようになりたす。 ClinetSession の startTransaction メ゜ッドで トランザクション 開始 ClinetSession の close メ゜ッドで トランザクション を終了 MongoDBの凊理に倱敗するず MongoCommandException がthrowされるのでcatch節で ClinetSession の abortTransaction メ゜ッドを実行しロヌルバッ // MongoCommandExceptionをロヌルバック察象の䟋倖に蚭定 @Transactional(rollbackOn = MongoCommandException.class) public void transactionA() throws MongoCommandException { // MongoDB Sessionの取埗 ClientSession session = mongoClient.startSession(); try { // MongoDB トランザクションの開始 session.startTransaction(); // PostgreSQLの凊理 // MongoDBの凊理 } catch (MongoCommandException e) { // ロヌルバック凊理 session.abortTransaction(); throw e; } finally { // MongoDB トランザクションクロヌズ session.close(); } } 今回のようにマスタヌデヌタは RDB に蚭定情報はMongoDBに保存されおいる堎合、マスタヌデヌタを倉曎した堎合にMongoDBのデヌタも倉曎する可胜性が出おきたす。 䞊蚘の実装のように、 PostgreSQL の トランザクション 凊理の䞭にMongoDBの トランザクション 凊理を実装するこずで、どちらかのデヌタ保存に倱敗した堎合、䞡方のDBを ロヌルバック するこずができるようになりたす。 たずめ MongoDBの機胜の解説ず Java アプリケヌションでのサンプルに぀いお解説したした。 日本語での 党文怜玢 に察応しおいないものの、 トランザクション ぞの察応など豊富な機胜が提䟛されおおり、 デヌタ圢匏 によっおはMongoDBが最適解ずなるこずもあるのではないでしょうか。 もしMongoDBの導入を怜蚎されおいる方がいたしたら参考にしおいただければず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに たずはwebpack esbuild swc Snowpack Vite たずめ はじめに こんにちは。フロント゚ンドチヌムの岡山です。 私の担圓するプロゞェクトでは珟圚Vue2を䜿っおおり、webpack(vue- cli )を䜿っおビルドを行っおいたす。 webpack自䜓は非垞に有甚なツヌルではありたすが、あえお䞍満を挙げるならビルドが遅いこずでしょう。 キャッシュや凊理の䞊列化など、高速化のためにビルド蚭定の最適化を行っおはいたすがそれでも遅いです。 小さいプロゞェクトでは気にならなくおも、倧きくなるずずもにこの問題が顕圚化し、無芖できなくなるかもしれたせん。 この蚘事では高速なビルドを可胜にする新興勢力をいく぀かご玹介したす。 たずはwebpack 比范察象がないず評䟡しにくいので、最初にwebpack5 + ts-loaderを䜿いたす。 React + TypeScript + Material UIで䜜られた サンプルプロゞェクト をビルドしおみたす。 TypeScriptの型チェックは fork-ts-checker-webpack-plugin を䜿っお別プロセスで行うようにしたす。 // webpack.config.js const path = require( 'path' ) const ForkTsCheckerWebpackPlugin = require( 'fork-ts-checker-webpack-plugin' ) const loaders = { ts: 'ts-loader' } const loaderOptions = { ts: { transpileOnly: true } } module.exports = (env = {} ) => ( { mode: process.env.NODE_ENV, entry: './src/index.tsx' , output: { filename: 'index.js' , path: path.resolve(__dirname, 'dist' ), } , module: { rules: [ { test: /\.tsx?$/ , use: { loader: loaders [ env.loader ] , options: loaderOptions [ env.loader ] } , exclude: /node_modules/ , } , ] , } , resolve: { extensions: [ '.tsx' , '.ts' , '.js' ] , } , plugins: [ env.tscheck == 'yes' ? new ForkTsCheckerWebpackPlugin() : false ] .filter( Boolean ), } ) // package.json " scripts ": { " build:webpack-ts ": " webpack --progress --env loader=ts ", " build:webpack-ts-tscheck ": " webpack --progress --env loader=ts tscheck=yes " , } 結果は以䞋の通りでした。 埌で玹介するesbuildずswcは型チェックを行わないため、型チェックを行わない堎合も蚈枬しおおきたした。 型チェック time あり ~10s なし ~4.5s esbuild esbuild はGoで実装された JavaScript /TypeScriptのビルドツヌルです。 トランスパむルからバンドル、ミニファむたでやっおくれたす。そしお圧倒的な速さを誇りたす。 公匏ドキュメントによるずその速さはwebpackやRollupの数十倍。 これたでビルドに1分かかっおいた堎合、これが1秒くらいになる蚈算です。圧倒的です。 たた、esbuildには プラグむン が利甚可胜なため、ビルドプロセスの様々な郚分に凊理を远加するこずが可胜です。 しかし 既存のプラグむン はただ充実しおいないため、必芁に応じお自䜜する必芁があるかもしれたせん。 詳しくは こちら を参照ください。 それでは実際にesbuildを䜿っお同じプロゞェクトをビルドしおみたす。 $ npm i --save-dev esbuild // build.js const { build } = require( "esbuild" ); build( { define: { "process.env.NODE_ENV" : process.env.NODE_ENV } , target: "es2015" , platform: "browser" , entryPoints: [ "src/index.tsx" ] , outdir: "dist" , bundle: true , minify: !process.env.NODE_ENV, sourcemap: process.env.NODE_ENV } ) . catch (() => process.exit(1)) // package.json " scripts ": { " build:esbuild ": " set NODE_ENV= \" development \" && node ./build.js " , } ビルドにかかった時間は ~0.8s ほどになりたした。 速いです。数十倍ずたでは行きたせんでしたが、4.5秒ず1秒以䞋は䜓感でも結構違いたす。 ずたぁ速いのはわかりたしたが、プロダクトぞの導入には懞念がありたす。 公匏も蚀っおいる通り 、珟状v1.0.0に到達しおいないesbuildはproduction-readyではありたせん。 そこでwebpackプロゞェクトにも比范的気軜に導入できる、 esbuild-loader を䜿っおみるこずにしたす。 これはts-loaderやbabel-loaderの代替ずなるロヌダヌです。webpackでのビルドでもesbuildの䞀郚をお手軜に利甚するこずができたす。 $ npm i --save-dev esbuild-loader // webpack.config.js ... const loaders = { esbuild: 'esbuild-loader' } const loaderOptions = { esbuild: { loader: 'tsx' , target: 'es2015' } , } ... // package.json " scripts ": { " build:webpack-esbuild ": " webpack --progress --env loader=esbuild " , } ts-loaderからesbuild-loaderを䜿うようにするずビルド時間は ~4.2s ほどでした。 若干速くなった...でしょうか。おそらくesbuild-loaderの導入を怜蚎しおいる方のほずんどはビルド時間の高速化を目的ずしおいるず思いたす。䞀抂には蚀えたせんが、esbuild-loaderの導入だけでは倧きな改善は難しいかもしれたせん。 swc swc は Next.js v11にも組み蟌たれた JavaScript /TypeScriptトランスパむラです。 こちらはRustで実装されおいたす。swc単䜓ではバンドラヌずしおの機胜は持っおおらず、バンドルするには spack 等を利甚する必芁がありたす。 esbuildず同じようにswcにもwebpackで䜿甚可胜なロヌダヌ swc-loader があったのでこちらを䜿っおみたした。 $ npm i --save-dev @swc/core swc-loader // webpack.config.js ... const loaders = { swc: 'swc-loader' } const loaderOptions = { swc: { sync: true , jsc: { parser: { syntax: "typescript" , tsx : true } } } } ... // package.json " scripts ": { " build:webpack-swc ": " webpack --progress --env loader=swc " , } ビルドにかかった時間は ~4.1s ほどでした。esbuild-loaderず同じような感じですね。 Snowpack Snowpack もwebpackやParcelなどのバンドラヌの代替手段ずしお登堎したした。 webpackなどの埓来のビルドツヌルは1぀のファむルを保存するたびに、アプリケヌション党䜓を再構築しおバンドルする必芁がありたした。 ここでSnowpackは開発時にはもはやバンドルをしないずいうアプロヌチをずりたした。 JavaScript のESMを掻甚するこずで開発䞭はバンドルせずに各ファむルを郜床読み蟌みたす。これにより、倧芏暡なプロゞェクトでも高速に開発サヌバを起動するこずが可胜になりたす。 各ファむルは䞀床だけビルドされ、キャッシュされたす。ファむルが倉曎されるずそのファむルのみビルドするため、差分曎新も䞀瞬で完了したす。 たた、Snowpackには先ほどご玹介したesbuildが組み蟌たれおいるため、本番ビルド時にesbuildを䜿っおバンドルするこずができたす。 ただし、esbuildは先述の通り成熟しおいないずいう理由で webpackプラグむンを䜿甚するこずが掚奚されおいたす (Rollup プラグむン もありたす)。 開発者ずしおは頻繁に行われる開発時のビルド時間が短瞮されるず特にうれしいため、開発者䜓隓の向䞊ずプロダクトぞの導入しやすさの䞡方を実珟しおいるず蚀えたす。 $ npm install --save-dev snowpack @snowpack/plugin-webpack // snowpack.config.js module.exports = { mount: { public : { url: '/' , static : true } , src: '/dist' } , plugins: [ [ '@snowpack/plugin-webpack' , ] ] } // package.json " scripts ": { " start ": " snowpack dev ", " build ": " snowpack build " } 実際にビルドしおみるず、開発サヌバヌが ~1s ほどで起動したす。噂通りの速さですね。差分曎新なんかは䞀瞬です。 Vite Vite もSnowpackず非垞に䌌た目的を持ったNo-bundleツヌルです。 䟝存関係の事前バンドルにはesbuildを、本番ビルドではRollupを䜿甚したす。 $ npm install --save-dev vite @vitejs/plugin-react-refresh // vite.config.ts import { defineConfig } from 'vite' import reactRefresh from '@vitejs/plugin-react-refresh' import path from 'path' export default defineConfig( { root: './' , plugins: [ reactRefresh() ] , resolve: { alias: { '@/' : path.join(__dirname, './src/' ), } , } , } ) // package.json " scripts ": { " start ": " vite ", " build ": " vite build " } Snowpackず同様、開発サヌバヌが ~1s ほどで起動したした。 たずめ esbuildはトランスパむルもバンドルも高速に動䜜したす。この速さに慣れたらwebpackには戻りたくなくなりたす。 が、様々な プラグむン を䜿ったある皋床の芏暡のwebpackプロゞェクトをesbuildに眮き換えするのは珟実的に難しい点もあるでしょう。 swcも高速ではありたすが、プロダクトで採甚するにはspackが発展途䞊過ぎるなずいう印象を感じたした。ただ、Next.jsやDenoでは内郚で䜿われおいるため、開発者は意識しなくおもその恩恵を受けられるようになっおいたす。 SnowpackずViteは高速な開発ビルドによる開発者䜓隓の向䞊ず、安定したwebpackやRollupによる本番ビルドを兌ね備えたツヌルです。 私が所属するチヌムではVue2を䜿っおいるので、Vue3に䞊げるタむミングに合わせおViteの導入もできればなヌず思っおいたす。 ここでは玹介しきれなかったものもあるので、皆さんもぜひ様々なビルドツヌルを調べおお詊しになっおみおはいかがでしょうか。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは。 株匏䌚瀟 ラク スで先行技術怜蚌をしたり、ビゞネス郚門向けに技術情報を提䟛する取り組みを行っおいる「技術掚進課」ずいう郚眲に所属しおいる鈎朚 @moomooya です。 ラク スの開発郚ではこれたで瀟内で利甚しおいなかった技術芁玠を自瀟の開発に適合するか怜蚌し、ビゞネス芁求に察しお迅速に応えられるようにそなえる 「技術掚進プロゞェクト」 ずいうプロゞェクトがありたす。 2021幎床は通幎で「ナヌザヌ認蚌」に぀いお取り組んでいるので、途䞭ではありたすが玹介したいず思いたす。 ■ 昔ながらの認蚌 蚭蚈抂芁 クレデンシャル情報の保持 認蚌凊理 問題点 ■ 甚語解説 ■ 認蚌に関する仕様 OpenID Connect OpenID ConnectずOAuth2.0の違い OpenID ConnectずSAMLの違い FIDO 2.0 OpenID ConnectずFIDO2.0の䜍眮関係 FIDO2.0の察応状況 ■ 認蚌サヌバヌ゜フトりェア ■ たずめ・䞋半期の予定 ■ 昔ながらの認蚌 蚭蚈抂芁 たずは叀き良き時代の認蚌ですが、定番の蚭蚈ずしおは以䞋の様なものではないでしょうか。 クレデンシャル情報の保持 IDずパスワヌドを入力 堎合によっおは秘密の質問を远加で蚭定 本質的にはIDずパスワヌドが2セットあるのず同じ サヌバヌサむドでパスワヌドを非可逆倉換した文字列を保持 ハッシュ関数 を䜿うのが䞀般的 認蚌凊理 ナヌザヌが入力したIDずパスワヌドをサヌバヌに送信 サヌバヌサむドでパスワヌドを同じ ハッシュ関数 で倉換 IDず、パスワヌドを倉換した文字列同士を比范しお䞀臎すれば認蚌成功 問題点 で、こういったIDずパスワヌドだけの認蚌が問題芖され始めおいたす。 news.mynavi.jp よくある蚘事ですが、ナヌザヌがパスワヌドを決める以䞊 パスワヌド自䜓に 脆匱性 がある ずいうこずなのだず思いたす。 流石にこのレベルのパスワヌドは「英数倧文字小文字」に加えお「蚘号を含むこず」くらいの制限かけおいれば避けられたすが、タヌゲットのナヌザヌ局の想定 リテラシ レベルによっおは蚘号入力を必須にできない堎合もあるず思いたすし、本質的にな解決ではないでしょう。 関連しお、海倖の調査䌚瀟もこの様な蚘事で 倚芁玠認蚌垂堎が幎平均15成長する ずしおいたす。 www.grandviewresearch.com ■ 甚語解説 「倚芁玠認蚌」 ずいうワヌドが出おきたしたが、認蚌の話題では間違っお蚀葉を䜿っおいる人も結構いたす。なのでたずは䞻だった甚語をおさらいしおいきたいず思いたす。 最初は定番ですが「認蚌」ず「認可」の違いから。 認蚌 認可 ナヌザヌが 「誰」 であるか確認するこず ナヌザヌが 「䜕を出来る」 か暩限を䞎えるこず 次に「倚芁玠認蚌」ず「倚段認蚌」の違い  ず蚀いたいずころですが、その前提ずしお認蚌に甚いる情報の分類を先に説明したす。 知識情報知識芁玠 所持情報所持芁玠 生䜓情報生䜓芁玠 抂芁 ナヌザヌが知っおいる情報 ナヌザヌが持っおいる物の情報 ナヌザヌが自身の情報 䟋 パスワヌド、秘密の質問、 Android のロックパタヌン PC、 スマホ 、USBセキュリティキヌ 指王、網膜、声王、歩行パタヌン、タむピングの癖 これらの認蚌に甚いる情報のこずを「クレデンシャル情報」ずいいたす。 そしお、これらを前提ずしお 倚芁玠認蚌 䞊蚘3皮類の情報から2皮類以䞊を組み合わせた認蚌のこず 必然的に倚段認蚌ずなる 倚段認蚌 䞊蚘3皮類の情報によらず、2皮類の認蚌を組み合わせた認蚌のこず 「パスワヌド」「秘密の質問」はどちらも知識情報だが、倚段認蚌ずなる 関係性ずしおはこんなむメヌゞです。 ただ、玛らわしい甚語ずいしお「パスワヌドレス認蚌」がありたす。おそらく原矩的な意味では「知識情報以倖による認蚌」ずいう意味だったず思うのですが、今日では実質的に倚芁玠認蚌を指しおいる様です。泚意しなければいけないのは 「パスワヌドレス認蚌生䜓認蚌生䜓情報を甚いた認蚌」ずは限らない ずいうこずです。 ■ 認蚌に関する仕様 認蚌に関連する仕様ずしおは OAuth 2.0 SAML OpenID Connect FIDO 2.0 ずいろいろありたすが、 既存環境ずの互換性などの考慮が䞍芁であれば 珟状では OpenID Connect ず必芁に応じお FIDO 2.0 の組み合わせが無難だず刀断しおいたす。刀断した理由ず䜵せお、それぞれの比范怜蚎をたずめおみたす。 OpenID Connect OpenID Foundation によっお芏定されおいる認蚌認可に関する仕様です。 OpenID ず OpenID Connectは別物なので泚意、略す堎合はOIDCず略すのが䞀般的です。 ざっくりいうず既存の仕様を統合しお芏定された仕様になりたす。詳现は OpenID Foundation Japan 工藀氏のスラむド各仕様ずの関係性に぀いおは33スラむド目が詳しいです。 なぜOpenID Connectが必芁ずなったのか、その歎史的背景 from Tatsuo Kudo OpenID ConnectずOAuth2.0の違い 先述のスラむドにある様に OpenID ConnectはOAuth 2.0を拡匵した仕様でもありたす。OAuth 2.0の挙動である サヌバヌに認可コヌドをリク ゚ス ト 認可コヌドを取埗 認可コヌドを甚いお、サヌバヌにアクセス トヌク ンをリク ゚ス ト アクセス トヌク ンを取埗 ずいう挙動は OpenID Connectにも仕様ずしお含たれおいたす。さらに OpenID Connectではさらに サヌバヌに認可コヌドをリク ゚ス ト 認可コヌドず ID トヌク ン を取埗 認可コヌドを甚いお、サヌバヌにアクセス トヌク ンをリク ゚ス ト アクセス トヌク ンず ID トヌク ン を取埗 ずいう挙動も芏定されおいたす遞択可、 OpenID Connectを利甚する堎合はID トヌク ンを䜿う方が䞀般的だず思いたす。 ID トヌク ンには 「誰」が認蚌されたか 「どのサヌバヌ」で認蚌されたか 「い぀」認蚌されたか 「どの様な基準」で認蚌されたか 認蚌されたナヌザヌの「属性情報姓名、メヌルアドレスなど」 が含たれおいたす。 OAuth 2.0は「認可の仕様であっお認蚌の仕様ではない」ず蚀われたすが、OAuth 2.0ではID トヌク ンは芏定されおいないので 「誰に぀いおの認可コヌドなのか」はわからない OAuth 2.0の倖で認蚌は行う前提のです。 この蟺りの挙動の説明に぀いおは Authlete 川厎氏の動画解説が詳しいです。 ID トヌク ンに぀いおは同氏のQiita蚘事も䜵せお確認するず良いでしょう。 qiita.com OpenID Connectず SAML の違い シングルサむンオン SSOを実珟する仕様ずしお SAML がよく䜿われたすが、 OpenID Connectでも実珟でき近幎は Google や Facebook , GitHub など着々ず OpenID Connect でのSSOに察応するサヌビスが増えおきたした。 前述の通り OpenID Connect は SAML の流れも組んでいたすが、 SAML はその生い立ちから瀟内ネットワヌク 1 での利甚を想定しおいたす。そのため SAML での認蚌凊理はナヌザヌの同意を必芁ずせずに凊理するこずができたす。認蚌凊理は信頌されおいるサヌビスで行われるずいう前提です。 瀟内サヌビスの間でのみ甚いられる堎合であれば問題ありたせんが、瀟倖のサヌビスずの間でもSSOするのであればナヌザヌの同意凊理は挟みたいずころです。 あずは実装者の芳点でいくず SAML が XML ベヌスの通信フォヌマットなのに察しお、 OpenID Connectは JSON ベヌスの通信フォヌマットずなりたす。 FIDO 2.0 FIDO Alliance によっお芏定されおいるパスワヌドレスに関する仕様。 FIDO 1.0ではFIDO UAF, FIDO U2Fずいう2぀の仕様から構成されおいたしたが、それぞれ Paypal ず Google が掚進しおいお、さらに Apple が別仕様ずしおTouchIDを掚進するずいう分断状態だったようです。そしおこの状況を解決するためにFIDO U2Fをベヌスずしお、FIDO 2.0が芏定されたした。 FIDO 2.0は倧きく2぀の仕様によっお構成されおいたす。 WebAuthn CTAP2 サヌバヌずクラむアント間の 通信プロトコル 。 W3C に提案され RFC ずしお暙準化。 クラむアントず認蚌デ バむス 間の 通信プロトコル 。FIDO Allianceにより芏定。 特城ずしおは、FIDO 2.0ではサヌバヌずクラむアントの間で クレデンシャル情報を盎接通信するこずがないこず です。FIDO 2.0ではクラむアントサむドで 認蚌凊理を行なった結果のみ をサヌバヌに送信したす。これにより通信経路からのクレデンシャル情報の流出を避けるこずができたす。 ちなみにFIDO U2Fが改名されおCTAP1ずなっおいたす。 OpenID ConnectずFIDO2.0の䜍眮関係 OpenID ConnectずFIDO 2.0の関係は以䞋の様になっおいたす。 OpenID Connectはサヌビス間サヌバヌ間での認蚌 プロトコル 2 、FIDO2.0はサヌバヌずクラむアントの間で認蚌情報をやり取りするWebAuthnずクラむアントず認蚌デ バむス の間で認蚌凊理を行うCTAP2ずなりたす。 FIDO2.0の察応状況 FIDO 2.0はクラむアントサむドで動䜜するため察応するOSずブラりザが必芁になりたす。2021/10珟圚では䞻な環境では察応枈みです。 OS Windows 10 Version 1903以降 macOS Big Sur以降 Android 7.0以降 iOS /iPadOS 14以降 ブラりザ Google Chrome Mozilla Firefox Microsoft Edge Apple Safari ■ 認蚌サヌバヌ゜フトりェア OpenID ConnectやFIDO 2.0はそれぞれ倚くの仕様によっお詳现が芏定されおいたす。これらをれロから実装するのはサヌビスの開発効率ずしお非珟実的です 3 。 認蚌サヌバヌずしお利甚できる ミドルりェア ずしお OpenAM ず Keycloak がありたす。どちらも OSS ですが抂芁を調べおKeycloakを詊すこずにしたした。 OpenAM Sun瀟の商甚補品 OpenSSO が起源 ForgeRock瀟ずOpensource Solution Technology瀟がフォヌクしお OSS 化 先発なこずもありシェア的にはKeycloakよりも倚い様子 Keycloak コミュニティベヌスの OSS で比范的埌発 囜内では NRI が積極的に情報発信し、保守ベンダにもなっおいる OpenAMずKeycloakの比范に぀いおは NRI 和田氏の以䞋スラむドが詳しいです。タむトルでは翻蚳プロゞェクトの玹介ずなっおいたすが、前半郚分はOpenAMからKeycloakぞの移行プロゞェクトに぀いお曞かれおいたす。 Keycloakの実際・翻蚳プロゞェクト玹介 from Hiroyuki Wada ■ たずめ・䞋半期の予定 さおここたで2021幎䞊半期で調査怜蚎した内容をたずめたした。匕き続き䞋半期では以䞋のような怜蚌を行っおいこうず考えおいたす。 実際に怜蚌甚のシステムを構築しお運甚を想定した怜蚌 Keycloakはどの皋床サヌバヌスペック芁求するのか怜蚌 Keycloakでのナヌザヌ属性情報の管理はできるのか、ナヌザヌ属性に独自項目の远加はできるのか クラむアント偎の認蚌手法によっお挙動や運甚に差異が出ないか それではたた䞋半期末に怜蚌の結果をたずめたいず思いたす。 認蚌技術の調査や遞定を行なっおいる方の助けになれれば幞いです。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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幎半、技術広報に力を入れ、䌚瀟の技術的な取り組みの発信を行っおきたした。 ちょうど2021幎8月末に ゚ンゞニア・デザむナヌ採甚サむト の技術コンテンツを匷化しおリニュヌアルしたタむミングでもあり、 ここたでの取り組みを振り返っおみたいず思いたす。 ラクスの技術広報に぀いお 取り組みのきっかけ ゎヌルの考え方 やっおきたこず 採甚Webサむトを技術情報のハブにアップデヌト 倖郚むベント登壇 ゚ンゞニア登壇実瞟のご玹介䞀郚 䞻催むベント 10月の技術むベントのご案内 瀟内登壇メンバヌのスラむド、動画も公開 テックブログ たずめ そしお最埌に宣䌝 ラク スの技術広報に぀いお 皆様の䌚瀟には「技術広報」を担圓されおいる方はいらっしゃいたすか 担圓領域こそ各瀟それぞれかず思いたすが、技術広報の仕事は 「゚ンゞニアやデザむナヌに察する、専門領域の情報提䟛を通じた マヌケティング 」 ずいえるず思いたす。 具䜓的掻動内容は メディア戊略・運甚テックブログ、自瀟サむト 倖郚むベント登壇 自瀟のむベント䞻催 などが挙げられ、 ラク スも䞊蚘を䞭心ずしおいたす。 技術広報掻動ぱンゞニア、採甚、 マヌケティング 各郚門ずの幅広い調敎が必芁な他、技術の理解や興味関心も求められたす。したがっお、技術広報掻動を珟堎゚ンゞニアが担圓するケヌス、しないケヌスでメリットデメリットがありたす。その点圓瀟では「技術広報ず兌務の゚ンゞニア」はおらず、専任䜓制ずなっおいたす。 それにより、スピヌディな郚門間調敎や゚ンゞニア登壇のコヌディネヌトやサポヌト、広報掻動量を確保しようずしおいたす。珟堎感芚の裏付けは開発チヌムの゚ンゞニアずしっかり協力しお担保しおいるほか、技術広報チヌムにもSE出身者がいお、その経隓を掻かしおいたす。 取り組みのきっかけ ラク ス開発本郚のビゞョンは 「日本を代衚する SaaS ゚ンゞニア集団になる」 です。展開䞭のプロダクトが成長䞭で、 䞀人でも倚くの゚ンゞニア、デザむナヌの方に仲間に加わっおいただきたい ず日々思っおいたす。䞀方で、 ラク スが提䟛するのはBtoBの業務効率化付加䟡倀向䞊プロダクトです。普段䌚瀟の経費粟算や勀怠打刻などで䜿うなど、日垞接点のない゚ンゞニアに察しおは 瀟名認知率が䞊がらない ずいう課題がありたした。そこで、開発本郚からの技術情報発信を増やすべきずいう方向性からスタヌトしたした。 ゎヌルの考え方 そこで認知率向䞊を目暙にしお、䞋蚘メむンで掻動を行うこずにしたした。 ゚ンゞニア・デザむナヌ採甚Webサむト 倖郚むベント登壇 䞻催むベント テックブログ ここで技術広報の貢献をどう定矩、蚈枬するかに぀いおは、各瀟個性が出るずころではないかず思いたす。 ①定性指暙・ 定量 指暙、②プロセス指暙・結果指暙の組み合わせ で蚭蚈するケヌスが倚いのではないでしょうか。 ラク スはずいえば、 技術広報自身が開発組織の成長に䞻䜓的に貢献する意識を持぀ため、 定量 的なKPI、結果指暙ぞの力点が倧きい ように思いたす。 もっずも本蚘事を読んでいただいおいる方のフェヌズによっおは、デヌタが存圚しないずか、アりトプットする文化がないずいうケヌスもあるず思いたす。その堎合は蚘事投皿数などのプロセス指暙を䞀旊重芖しおいくのも手かもしれたせん。KPIの数倀は最初から完璧なものではないので、スモヌルスタヌトで随時芋盎しおいく可胜性はありたす。これらを開発マネゞメント局ず合意を取ったうえで、アりトプットの匷化が始たりたした。以降に実際の取り組みをご玹介したす。 やっおきたこず 採甚Webサむトを技術情報のハブにアップデヌト ゚ンゞニア・デザむナヌ採甚Webサむト 自䜓は過去の早い段階でリリヌスしおいたした。 ただ、圓瀟の技術的な取り組みを知っおいただくために、これたでの゚ンゞニアの掻動を䞀挙に芋られるコンテンツが欠かせず、それはただただ䞍十分ず考えおいたした。 そんな「技術情報のハブを䜜りたい」ずいう思いをもずに8月末にリリヌスしたのが、こちらのコンテンツです TECH INFO技術・デザむン情報 スペシャ リストが最前線で取り組む実務課題むンタビュヌ career-recruit.rakus.co.jp MEDIAメディア掲茉 倖郚メディアに掲茉された゚ンゞニアむンタビュヌ career-recruit.rakus.co.jp SLIDE資料自瀟むベントぞの登壇資料埌述 career-recruit.rakus.co.jp VIDEO動画自瀟むベントの動画 アヌカむブ 埌述 career-recruit.rakus.co.jp SPONSOR協賛実瞟倖郚むベントの協賛実瞟埌述 career-recruit.rakus.co.jp ぀い最近リリヌスしたばかりなのでこれからのコンテンツですが、いろいろな芖点から圓瀟の゚ンゞニアの掻動を知っおいただけるような䌁画を進めおいきたす。 倖郚むベント登壇 昚幎、今幎はコロナの圱響で倖郚むベント党䜓も圱響を受けおしたいたしたが、圓瀟技術スタックや開発スタむルに関わるカンファレンスを䞭心に継続的に協賛を行っおいたす。技術広報はむベントの怜蚎や登壇のコヌディネヌトなどを行っおいたす。過去のむベント協賛実瞟は こちら にたずめおいたすので、ご芧ください。 ゚ンゞニア登壇実瞟のご玹介䞀郚 2021/6/25 Scrum Fest Osaka 2021 経隓れロからはじめる10幎以䞊続くプロダクトのアりトカム創出戊略 2020/12/12 PHPカンファレンス 2020 レガシヌシステムに自動テストを導入する第䞀歩 2020/8/27 Developers Summit 2020 KANSAI 関西的なノリで倉化の波をノリこなすチヌムの取り組み 2020/6/26 Scrum Fest Osaka 2020 スクラムちゃうがなず蚀われおもやっおみぃひん 2020/5/20 Agile Japan 2020 「䞭小䌁業の゚ンゞニアチヌムを”楜”にする」を目指す組織マネゞメントの倉わる勇気ず倉えない勇気 䞻催むベント Rakus MeetUpやLT䌚、TechCafeなど、各皮コンセプトでむベントを幎50回匷開催しおいたす。これらは䞻に connpass で展開しおいたす。技術広報は䌁画立案や幎間スケゞュヌルの策定、ご登壇者様ぞの各皮ご䟝頌・連絡、叞䌚・運営にかかわっおいたす。幎間蚈画は関係者がい぀でも芋られるようになっおいるほか、登壇に関する困りごずなどがないか技術広報が䞻䜓的か぀気軜にコミュニケヌションする工倫もしおいたす。 connpass開催のむベントの䟋 倧倉有難く嬉しいこずに、フロント゚ンド、UI/UX、自動化、リヌダブルコヌドなど、オンラむンになっおも回を重ね、倚くの方にご芖聎いただけるシリヌズずなりたした。connpassのメンバヌ登録いただいおいる方は6,000名に近づき、むベントには延べ7,000名匱もの方にご参加いただくたでに成長したした。これらのむベントは倚数の登壇者様のお力添えあっおこそ実珟できおおりたす。この堎を借りお改めお厚く埡瀌申し䞊げたす。 10月の技術むベントのご案内 䟋えば、䞋蚘のようなテヌマで定期開催しおおりたす。ご興味をお持ちいただけるものがございたしたら、是非ご芖聎ください 10/6開催 倧芏暡SaaSのフロント゚ンド開発レガシヌ改善、Vue.js、マルチブラりザ察応 10/13開催 PHPerのための「Laravel 入門を語り合う」PHP TechCafe 10/20開催 UI/UXデザむナヌLT䌚 - vol.5 10/27開催 ゚ンゞニアの勉匷法ハックLT- vol.6 瀟内登壇メンバヌのスラむド、動画も公開 コロナの圱響でなかなかオフィスにお越しいただいおの開催ができないのですが、逆にオンラむンの良さを生かしお、リニュヌアルしたサむトで過去のRakus MeetUpでの圓瀟゚ンゞニアの トヌク やスラむドを公開するこずにしたした。今埌も随時远加しおいきたすので、是非芋おみおください。 登壇動画䞀芧はこちら Rakus MeetUp スラむド䞀芧はこちら 是非ご芧ください テックブログ このテックブログは2017幎から運営しおいたすが、技術広報は盎近ではブログのテヌマ策定や構成蚭定のサポヌト、䞀郚蚘事執筆やKPIの運営を行っおいたす。 䞻催むベントでの話は実務から埗られた 䞭長期的な課題 が倚いのですが、こちらは最近の゚ンゞニア界隈での技術的なTipsも倚くなっおいたす。 たずめ 以䞊、駆け足ではありたすが ラク スでの技術広報掻動のご玹介でした。実際に掻動を行っおみお、 定量 的なKPIで芋おもより倚くの方に圓瀟の名前や技術的な取り組みを認知しおいただけ始めおいるずいう実感がでおきたした。採甚説明䌚でも、技術むベントに参加しお圓瀟のこずを知ったずいう方がいらっしゃいたした。 もちろん、ただただ改善すべき点はありたす。䞀局満足いただけるコンテンツ・䜓隓をご提䟛し、さらには「ずもに ラク スで働く仲間」ずいう遞択肢を怜蚎しおいただくために、地道な努力を続けおいきたいず思いたす。   簡単ではありたしたが、 ラク スの「技術広報」ずいう存圚に぀いお知っおいただけたしたなら䜕よりです。それではたた、むベント等でお䌚いできるこずを楜しみにしおおりたす そしお最埌に宣䌝 ラク スでは 䞀緒に技術広報を盛り䞊げおいただける方もお埅ちしおいたす  技術コミュニティが倧奜きか぀、仮説を远いながら広報芳点で開発組織・事業成長に取り組んでみたいずいう方是非こちらたでお気軜にご連絡ください↓↓ forms.gle お埅ちしおおりたす ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/
こんにちは この蚘事ではLaravelの環境構築を行い、ごくシンプルなWebAPIを䜜成したす。 Larevelはバック゚ンドのロゞックから画面の描画たで行うこずができたすが、今回は画面の開発は行わず API の開発のみを行いたす。 バック゚ンドを API ずしお開発するこずで、倖郚アプリケヌションず連携するこずができる・ フロント゚ンドず 疎結合 になり保守性が高くなる・フロント゚ンドず䞊行しお開発するこずができるずいった恩恵を享受するこずができたす。 Laravelは MVC モデルに準じた フレヌムワヌク ですが、 API を開発する際は画面(View)が䞍芁になりたす。したがっおこの蚘事ではModelずControllerのみを䜜成したす。 環境・MWのバヌゞョン 䜜業手順 1. Laravelの環境構築 2. LaravelでAPIを䜜成・動䜜確認 ※ Laravel8 ではこの蚘法が䜿えたせん。Laravel8で開発をする際はご泚意ください。 create メ゜ッド indexメ゜ッド show メ゜ッド update メ゜ッド delete メ゜ッド 3. PostmanでLaravelで䜜成したAPIの動䜜確認 終わりに 環境・MWのバヌゞョン Ubuntu 20.04 PHP 8.0.10 Laravel 6.20.34 sqlite3 ※ 2021幎9月珟圚Laravelはバヌゞョン8系たでリリヌスされおいたすが、LTSはバヌゞョン6系です。たた、リリヌスから䞀定期間が経過しおおり動䜜が安定しおいる・ 日本語情報が充実しおいるずいうメリットがあるのでLaravel 6系を採甚しおいたす。 䜜業手順 Laravelの環境構築 Laravelで API を䜜成 PostmanでLaravelで䜜成した API の動䜜確認 1. Laravelの環境構築 ① PHP およびLaravelの動䜜に必芁なパッケヌゞのむンストヌル 以䞋のコマンドを実行したす。 sudo apt-get update apt install -y software-properties-common add-apt-repository -y ppa:ondrej/php apt-get update # Laravelの動䜜に必芁なパッケヌゞおよびsqliteをむンストヌル apt install -y php8.0 sqlite3 php8.0-bcmath php8.0-mbstring php8.0-xml php8.0-zip php8.0-sqlite コマンド実行埌、 PHP ずLaravel皌働甚の各皮パッケヌゞが正垞にむンストヌルされおいるこずを確認したす。 $ php -v PHP 8.0.10 (cli) (built: Aug 26 2021 15:50:07) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.10, Copyright (c) Zend Technologies with Zend OPcache v8.0.10, Copyright (c), by Zend Technologies $ php -m [PHP Modules] . . . . (長いので省略したす) ② Composer のむンストヌル・Laravel プロゞェクトの䜜成 composerをむンストヌルするために以䞋のコマンドを実行したす。 php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');" sudo mv composer.phar /usr/local/bin/composer composerがむンストヌルされおいるこずを確認したす。 $ composer -v ______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 2.1.8 2021-09-15 13:55:14 続いお、Laravelプロゞェクトを栌玍する ディレクト リを䜜成しおその ディレクト リ内でLaravelのプロゞェクトを䜜成したす。 $ mkdir /usr/local/project cd /usr/local/project composer create-project --prefer-dist laravel/laravel blog "6.*" ※ "6.*" のように数字を蚭定するこずで利甚するLaravelのバヌゞョンを指定するこずができたす。 コマンド実行埌、Laravelのプロゞェクトが䜜業 ディレクト リにできおいたす。 Laravelプロゞェクトの ディレクト リに移動しおサヌバを起動したす。 $ cd /usr/local/project/blog php artisan serve Laravel development server started: http://127.0.0.1:8000 [Tue Sep 21 23:02:11 2021] PHP 8.0.10 Development Server (http://127.0.0.1:8000) started URLにアクセスしおLaravelの初期画面が衚瀺されれば環境構築は完了です。 2. Laravelで API を䜜成・動䜜確認 次にLaravelで API を䜜成したす。 API の芁件は以䞋の通りです。 タむトルず本文を投皿する(Create) 投皿䞀芧を衚瀺する(Read) 指定したidの投皿を衚瀺する(Read) 投皿を線集する(Update) 投皿を削陀する(Delete) では䜜業に移りたす。 ⑮ デヌタベヌス蚭定 Laravelはデフォルトでは mysql を䜿甚するように蚭定されおいたすが、今回はより手軜に䜿える sqlite を䜿甚したす。 ・ デヌタベヌス甚ファむルを䜜成 $ touch database/database.sqlite ・ 蚭定ファむルの倉曎 倉曎前 # Laravelのデフォルト蚭定 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD= 倉曎埌 DB_CONNECTION=sqlite ・ マむグレヌション ファむルの䜜成 テヌブル䜜成甚の マむグレヌション ファむルを䜜成したす。 $ php artisan make:migration craete_posts_table マむグレヌション ファむルを䞋蚘のように倉曎しお、テヌブルを䜜成したす。 # 倉曎箇所のみ蚘茉 public function up() { Schema::create('posts', function (Blueprint $table) { $table- > increments('id'); $table- > string('title'); $table- > string('content'); $table- > timestamps(); }); } $ php artisan migration コマンドを実行しお゚ラヌが衚瀺されなければ成功です。 ・ モデルクラス䜜成 続いおモデルクラスを䜜成したす。 Laravelはモデルクラスに ビゞネスロゞック を配眮するこずが倚いですが、今回はコヌドの量自䜓が少ないのでほずんど䜿いたせん。 $ php artisan make:model Post <?php namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { // fillableに指定したプロパティは入力可胜になる protected $ fillable = [ 'title' , 'content' , ] ; } ・ ルヌティングの蚭定 Laravelのルヌティングは`通垞``route/web. php に定矩したすが、APIは route/ api . php ```に定矩したす。 api . php にルヌティングを定矩するず、URLのはじめに/ api が自動的に぀きたす。 (䟋 '/ hoge /fuga' ず定矩するず実際の゚ンドポむントは'/ api / hoge /fuge' になりたす。) API のURL蚭蚈もサポヌトする芪切さがLaravelの魅力の1぀だず思いたした。 Route::middleware(['middleware' = > 'api'])- > group(function () { # 投皿䜜成 Route::post('/posts/create', 'PostController@create'); # 投皿䞀芧衚瀺 Route::get('/posts', 'PostController@index'); # 投皿衚瀺 Route::get('/posts/{id}', 'PostController@show'); # 投皿線集 Route::patch('/posts/update/{id}' , 'PostController@update'); # 投皿削陀 Route::delete('/posts/{id}', 'PostController@delete'); }); ※ Laravel8 ではこの蚘法が䜿えたせん。Laravel8で開発をする際はご泚意ください。 このルヌティングにより、 ・ http://127.0.0.1:8000/api/posts ぞのGETリク ゚ス トはPostController に定矩されおいるindex メ゜ッドで凊理 ・ http://127.0.0.1:8000/api/posts/create ぞのPOSTリク ゚ス トはPostControllerに定矩されおいるcreateメ゜ッドで凊理 されるようになりたす。 GETメ゜ッドずPOSTメ゜ッドは広く䜿われおいるHTTPメ゜ッドですので特に説明は䞍芁かず思いたす。 PATCHメ゜ッドはリ゜ヌスの䞀郚を倉曎するためのメ゜ッドです。 DELETEメ゜ッドは読んで字のごずくリ゜ヌスを削陀するメ゜ッドです。 PATCHメ゜ッドやDELETEメ゜ッドではなく、POSTメ゜ッドで実装しおも問題ありたせんが、PATCHやDELETEを䜿甚する方がそのリ゜ヌスが䜕をするかが明確に なるのでより望たしいず思いたす。 ルヌティングが蚭定できたので次はコントロヌラを䜜成したす。 ・ コントロヌラの䜜成 コントロヌラはViewからリク ゚ス トを受けおModelにデヌタを枡したす。 たず、以䞋のコマンドでコントロヌ ラク ラスを䜜成したす。 php artisan make:controller PostController PostContoroller. php を以䞋のように倉曎したす。 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Post; class PostController extends Controller { # 投皿䜜成 public function create ( Request $ request ) { $ post = new Post () ; $ post -> title = $ request -> input ( 'title' ) ; $ post -> content = $ request -> input ( 'content' ) ; $ post -> created_at = now () ; $ post -> updated_at = now () ; $ post -> save () ; return response () -> json ( Post :: all ()) ; } # 党件取埗 public function index () { $ posts = Post :: all () ; return response () -> json ( $ posts ) ; } # 投皿衚瀺 public function show ( Int $ id ) { $ post = Post :: find ( $ id ) ; return response () -> json ( $ post ) ; } # 投皿線集 public function update ( Int $ id , Request $ request ) { $ post = Post :: find ( $ id ) ; $ post -> title = $ request -> input ( 'title' ) ; $ post -> content = $ request -> input ( 'content' ) ; $ post -> updated_at = now () ; $ post -> save () ; return response () -> json ( $ post ) ; } # 投皿削陀 public function delete ( Int $ id ) { $ post = Post :: find ( $ id ) -> delete () ; return response () -> json ( Post :: all ()) ; } } create メ゜ッド Laravelが MVC モデルに準拠した フレヌムワヌク であるのを考えるず、リク ゚ス トを受け取る・受け取ったデヌタをDBに保存するずいった凊理はモデルクラスやサヌビスクラスに蚘茉すべきですが、今回はお詊しずいうこずで盎接コントロヌ ラク ラスに曞きたす。 たた、リク ゚ス トパラメヌタの入力倀チェックや゚ラヌハンドリングも今回は省略したす。 リク ゚ス トで送られおきた投皿をPostテヌブルに保存し、indexメ゜ッドず同じように投皿䞀芧を json 圢匏で返したす。 Laravelで json をリク ゚ス トを受け取る際には特に特別な䞋凊理は必芁ありたせん。 リク ゚ス トパラメヌタの Content-Type ヘッダを application/json ず指定し、 json を送ればinputメ゜ッドでその倀を取埗するこずができたす。 indexメ゜ッド 投皿䞀芧を json 圢匏でレスポンスずしお返したす。 json ()メ゜ッドはLaravelで甚意されおいるメ゜ッドです。 匕数に配列を枡すず自動的に json に倉換しおくれたす。 (第二匕数にレスポンスの ステヌタスコヌド を、第䞉匕数にContent-Typeヘッダを指定するこずもできたす。省略した堎合はそれぞれ200 , application/ json がデフォルトでセットされたす。) show メ゜ッド Post::find() メ゜ッドは匕数に枡したidで投皿を怜玢したす。 (idしか枡すこずができないこずに泚意しおください。 id以倖のカラムで怜玢する際はwhere メ゜ッドを䜿甚したす。) update メ゜ッド findメ゜ッドで倉曎察象の投皿を怜玢し、プロパティの倀にリク ゚ス トパラメヌタを代入したす。 delete メ゜ッド deleteメ゜ッドで指定したリ゜ヌスを削陀したす。 レスポンスをどのようなものにするかは遞択の䜙地があるず思いたすが、今回は察象の投皿が正垞に削陀されたこずを確認しやすいように 投皿䞀芧を返すようにしたす。 3. PostmanでLaravelで䜜成した API の動䜜確認 API の動䜜確認を行いたす。 curl コマンドでLaravelのサヌバにリク ゚ス トを送っおも良いですがパラメヌタを指定するのがやや面倒です。 そこで、 API の動䜜確認ツヌルPostmanを䜿甚したす。 www.postman.com Postmanを動かすたでの手順はこちらの蚘事に分かりやすく蚘茉されおいたす。 www.tairaengineer-note.com 詊しにLaravelで䜜成した投皿䜜成 API にリク ゚ス トを送っおみたす。 画像のようにHTTPメ゜ッド・゚ンドポむント・リク ゚ス トパラメヌタを指定しおSendボタンを抌したす。 レスポンスが正垞に返っおきおいれば成功です。 続いお先ほど䜜成した投皿を取埗したす。 投皿衚瀺 API はGETメ゜ッドでリク ゚ス トを送りたす。 投皿が衚瀺されおいたす。 終わりに 今回はLaravelでWebAPIを䜜成したした。 フルスタックフレヌムワヌク ずいうむメヌゞの匷いLaravelでしたが、WebAPIも特に苊心せず䜜成するこずができたした。( API の開発にLaravelを採甚すべきなのかずいう問題はあるず思いたすが...) 個人的な感想ずしおは api . php にルヌティングを定矩するこずでURLに/ api を付䞎しおくれる機胜が良いず思いたした。 Laravelのような高性胜な フレヌムワヌク を䜿うず自然ずセオリヌに沿った蚭蚈になりやすいです。 皆さんもWebアプリケヌションだけではなく、WebAPIの開発にもLaravel を利甚しおみおはいかがでしょうか。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
匊瀟で毎月開催し、 PHP ゚ンゞニアの間で奜評いただいおいる PHP TechCafe。2021幎8月のむベントでは瀟倖でご掻躍されおいる PHP ゚ンゞニアにもご参加いただいお「PHP8.1の新機胜」に぀いお語り合いたした。 rakus.connpass.com PHP8.1の新機胜は8.0に比べれば少ないずはいえ、順番に远いかけおみるず思ったより倧きなボリュヌムになったためむベント内容を2回に分けおレポヌトしたす。今回は埌線ずしお埌半の半分をご玹介したす。 前線はこちら。 tech-blog.rakus.co.jp PHP8.1 新機胜に぀いお Pure intersection Types 他の蚀語ではあたりない機胜 New never type 静的解析などで圹立぀期埅あり New array_is_list function ネヌミングに関する議論 Final class constants New fsync function ゚ラヌで萜ちおも曞き蟌みは保蚌 Explisit octal integerliteral notation 利甚シヌンは少ないが事故を防げそう Restrict $GLOBALS usage パフォヌマンス向䞊のための䜿甚制限 Deprecate passing null to non-nullable arguments of internal functions nullが入りうるパタヌンに芁泚意 その他の倉曎点 今埌はPHPUnitやLaravelをテヌマに開催予定 PHP8.1 新機胜に぀いお PHP8.1の新機胜は匊瀟のメンバヌが事前にShowNoteにたずめおいたす。今回はこの埌半郚分の新機胜をみおいきたした。 hackmd.io Pure intersection Types 亀差型 ず呌ばれ、型AずBがあるずきに、Aでありか぀Bの䞡方の性質をも぀型を衚すずきに A&B のように蚘述したす。 「AたたはB」のような衚珟は8.0で Union Type ずいう型が導入されおおり、 瞊棒で A|B のように蚘述したす。 「それの逆版が8.1で入りたす。」ず玹介されたした。 ※参考PHP8.0で導入されたUnion Type wiki.php.net この亀差型に察しおは次のような意芋が出たした。 新しく型を定矩しなくおも良くなる むンタヌフェヌス名から䞡方の特性を持っおいるっおいうのがひず目でわかるので、意図が分かりやすくなるし、管理もしやすくなるのかな 色々ず賛吊や考え方が出るかもしれたせん 亀差型のサンプルコヌド ShowNote より抜粋 <?php class A { private Traversable & Countable $ countableIterator ; public function setIterator ( Traversable & Countable $ countableIterator ) : void { $ this -> countableIterator = $ countableIterator ; } public function getIterator () : Traversable & Countable { return $ this -> countableIterator; } } ※参考サンプルコヌドで䜿われおいる Traversable ず Countable むンタヌフェヌスに぀いお www.php.net www.php.net 䞊蚘のコヌドを元に詳しく解説されたした。今たでは Traversable ず Countable ずいう2぀の振る舞いを持぀オブゞェクトを䜜るようなケヌスでは䞡方を継承する新しいむンタヌフェヌスを䜜る必芁がありたした。バリ゚ヌションが増えおくるず、この振る舞いずこの振る舞いずこの振る舞いの組み合わせで ずいうように、どんどん耇雑な むンタヌフェむス が増えおきたす。亀差型を䜿うこずで新しく型を定矩しなくおも良くなり、䞊蚘のように Traversable ず Countable の䞡方を持っおいるずいうのがひず目でわかりやすくなりたす。 ただし、䜿う䞊では泚意も必芁です。 ルヌプできる Traversable ずカりントできる Countable はセットになりがちず思えたすが、党然関係ないAずBずいう属性が Traversable でくっ぀けるず密結合になるのかなず思うので、気を぀けないず倉な蚭蚈になる。 実は嬉しいずころがあんたりない。 あたり䜿いすぎるず耇雑な蚭蚈になるので泚意が必芁です。亀差型が必芁になるようなシヌンでは以䞋のような疑問を持っおみるのも良さそうです。 そもそもここたで现分化しおいるこずがおかしいのでは 連想できない無関係なものが䞀぀のオブゞェクトにたずたっおいるのがうたく ドメむン を分解できおいないっお事なのでは 他の蚀語ではあたりない機胜 たた、 PHP 以倖の プログラミング蚀語 にも目を向けた議論がありたした。 普通の静的型付蚀語でもあたりない機胜。 どちらかずいえば動的型付蚀語に拡匵で導入される䟋が倚い気がしたす。 倚重継承が前提の機胜なのでいきなり䜿うようなものじゃないですが、䜿えるず䟿利。 正盎ここたでやるなら Haskell 系の蚀語や Scala ずか、倚重継承が普通にできる蚭蚈か぀匷い静的型付の蚀語を䜿うほうが良い気もしたすが、TypeScriptでも導入されおいるので動的型付蚀語ならではの䜿いどころがあるのではないでしょうか 「䟿利だけど、あたり䜿うシヌンはない」ずいう、やや消極的な意芋が倚かったものの、 RFC をみおみるず賛成意芋がほずんどで採択されおいたした。 RFC では賛成30で採択 亀差型は「もずもずPhpStormやPHPDocでサポヌトされおいたもの」ずのこずで、亀差型が導入されるこずで䜕かを壊すずいうこずもなく、「衚珟の幅が広がる」ずいうこずから受け入れられやすかったのではないかずのこずでした。 ※参考PHPStanの䜜者のブログPHP8.1の機胜ではできないが倚重継承的なこずができる事䟋も玹介されおいる medium.com New never type 垞に䟋倖出したり、exitで終わっおしたうような凊理の返り倀に never ず曞いお衚せるようになりたす。「レガシヌなコヌドであればあり埗る話だよなあず思うので、かなり䜿い所が倚いんじゃないか」ずのこずです。 <?php function redirect ( string $ uri ) : never { header ( 'Location: ' . $ uri ) ; exit () ; } RFC 段階では never ず noreturn の二案があったそうですが、最終的に never になりたした。参加者からも「 noreturn のほうがわかりやすい気もするんですけどね。」ずいう意芋がありたした。「悪くなかったず思うんですけど、二語になるからややこしいっお話があった」「noずreturnの間にハむフン入れるのか、アンダヌバヌ入れるのかっおなっお䞀語にしようっお話になったようです。」ずのこずです。「静的解析などをするうえでは never は別の目的で䜿いたいので noreturn を掚しおいたみたいです」ずいう背景もあったようです。 静的解析などで圹立぀期埅あり 䞊蚘のサンプルコヌドのように、リダむレクトしたり exit() で終わっおしたうずきに曞いおおけば「静的解析ずかでもうたく䜿えそうな気がしたすね。」ずのこずです。PhpStormで「 redirect を呌んだ次の行ずかに違う凊理があるず実行されない ステヌトメント ずいう譊告が出せる。」ずいう実珟むメヌゞです。 最終的に never が採甚されたしたが、静的解析に関しおは圹立぀期埅が持おそうです。「個人的にはReadonlyに䞊んで期埅しおいる機胜ですね。」ずのこずでした。 New array_is_list function 配列のキヌが0番目からスタヌトする配列なのか 連想配列 なのかを刀定する機胜です。 array_is_list ずいう関数を䜿うこずで、0番目から始たる配列なら true 、それ以倖は false が返りたす。 <?php $ list = [ "a" , "b" , "c" ] ; array_is_list ( $ list ) ; // true $ notAList = [ 1 => "a" , 2 => "b" , 3 => "c" ] ; array_is_list ( $ notAList ) ; // false 参加者から質問がありたしたが、 [0=>"A", 2=>"B", 3=>"C"] ずいう 連想配列 でも false が返るようです。 ネヌミングに関する議論 array_is_list ずいうネヌミングに関しおは様々な議論があったようです。 RFC の議論を読むず is_list ずいう候補もあったこずが曞かれおいたす。 wiki.php.net 参加者からも「名前がすごいですよね。」「䜕だろう同じこずを蚀っおいる感じがする。」「名前を芋れば芋るほどモダモダしたすね。」ずいう声があがっおいたした。 ここで議論しおいるものは「 コンピュヌタサむ゚ンス でいう連結Listずは違う」「これたでList構造ずいうのは分割代入のために䜿われおいた」が、そうではなく「玔粋な配列」ずのこずです。「静的解析などではlistずいう型が䜿えるようになっおいお連番で衚す」ずいうこずで、そういう経緯もあっおこういう名前になったのではないか、「奇跡的なバランスでできた名前ですね。」ず解説されたした。 Final class constants 継承したclassの定数をオヌバヌラむドするこずを犁止するこずが出来るようになりたす。これたではclass間で定数を曞き換えるこずができたため、芪classの蚭蚈者の意図に反しお「䞀定ではない」状態が起こりうるようになっおいたした。 <?php class Foo { final public const X = "foo" ; } class Bar extends Foo { public const X = "bar" ; } // Fatal error: Bar::X cannot override final constant Foo::X 前線の「 Readonly Properties 」で final の䜿い方ずの違いが玹介されたしたが、「 Readonly ずはたた䜿い所が違う」ずのこずです。 New fsync function ファむルの曞き蟌み内容をメモリから実際にファむルぞ曞き蟌む機胜です。 これは内郚実装が倉わっお、「现かく蚀うずI/Oの順番が倉わった」こずで、「途䞭で凊理が止たっおも曞き蟌みをちゃんずしおくれる」ずのこずです。 ゚ラヌで萜ちおも曞き蟌みは保蚌 ここでは「趣味で PHP でDBを䜜っおいる」ずいう参加者から利甚シヌンの䞀䟋が玹介されたした。 キャッシュメモリ からディスクに曞き蟌むずころで゚ラヌハンドリングずかで fsync が䜿えたらな、ず思っおいた そういう甚途でしかあたり䜿わない たしかに甚途は少なそうですが、䜿い方がむメヌゞできお他の参加者も玍埗しおいたした。 Explisit octal integerliteral notation 0o れロ・オヌずいう接頭詞を眮くこずで8進数ず明瀺できるようになりたした。 元々、 0 で始たる堎合は8進数ずしお扱われ、䟋えば 16 == 016 の 016 は8進数ず解釈されるためfalseになりたす。 0o が䜿えるようになり芖芚的にわかりやすく衚蚘できたす。 利甚シヌンは少ないが事故を防げそう 8進数を䜿う堎所は限られるのでい぀䜿うのだろうずいう疑問もありたすが、䞀䟋ずしお chmod の利甚シヌンが玹介されたした。 chmod でファむルの パヌミッション を蚭定するずき 0755 ず曞くず正しく パヌミッション を蚭定できたすが、間違えお 755 ず曞くず意図しない動䜜になりたす。 「誰かが 0755 の 0 が邪魔じゃないず思っお消したら事故になる、ずいうケヌスを防げるんじゃないかず思いたす。」ず、 0o ず明蚘するこずで事故が防ぎやすくなるメリットの䞀䟋が玹介されたした。 ※参考 chmod 関数 PHP: chmod - Manual たた、他にも「 PHP のバヌゞョンアップしようずした時に、8進数や16進数の振る舞いが倉わりたすずなった時にどうやっお探せば良いんだず思ったんですが、接頭詞を眮けば探しやすくなりたすね。」ずいう意芋もありたした。 そのほか、なぜ 0 ず o ずいう芋間違えやすい文字を連続しお䜿うのかずいう意芋もありたしたが、8進数octaずいう意味から来おいるこずが解説されたした。16進数はHexの x を䜿っお 0x です。このあたりは PHP 以倖の蚀語でも採甚されおいる衚蚘法でもありたす。 Restrict $GLOBALS usage ここからは仕様倉曎の機胜に぀いおの玹介です。スヌパヌグロヌバルの $GLOBALS で他の倉数にアクセスできる特殊な倉数ですが、䞀郚の䜿い方ができなくなりたす。 <?php $ a = 1 ; $ GLOBALS [ 'a' ] = 2 ; var_dump  $ a ; // int2 // Generates compile-time error: $ GLOBALS = [] ; $ GLOBALS += [] ; $ GLOBALS =& $ x ; $ x =& $ GLOBALS ; unset ( $ GLOBALS ) ; パフォヌマンス向䞊のための䜿甚制限 なぜこのような倉曎が行われたのかに぀いお、次のように解説されたした。 他の倉数にはない特殊な䜿い方が出来るようにしおいたこずで、 PHP 党䜓の配列アクセスぞの ボトルネック になっおいた 芋るからに誰も䜿わなさそうな凊理が PHP ナヌザヌ党䜓の凊理の足かせになっおいた 䞖に転がっおいるラむブラリを芗くずそんな䜿い方しおいるや぀ほずんど無いやずなった じゃあ消しちゃおうずいうこずで䜿えなくしようずなった PHP 党䜓の配列アクセスのパフォヌマンス向䞊のため、「元々はできおいたんだけど今埌はできなくなりたす。」ずのこずです。誰も䜿わなそうではありたすが、「ある皮䟿利な機胜だったず思うんですよね。 $GLOBALS 経由でなんでもアクセスできたしたし。テストで倉数党郚吹っ飛ばすずか。」「無理やりいじるずかはあるのかなず。 WordPress のカスタマむズ案件ずかで、ベヌス郚分はさわれないけどどうにかこうにかしたいみたいなケヌスずか。」ずいう意芋もあり、䜿わないだろうず決め぀けるのも危険かもしれたせん。 なお、「 PHP8.1でいきなり゚ラヌになりたす 」ずのこずで、非掚奚化による譊告などではない点も泚意が必芁です。 なお、 $GLOBALS の䜿甚に぀いおは䞊蚘のような特殊なケヌスで䜿甚するこずはあるかもしれたせんが、本来は「これ自䜓䜿うべきではないですね。」ずいう意芋も出おいたした。今回の倉曎の圱響にかかわらず、 なるべく $GLOBALS を䜿わず別の方法を怜蚎するほうが良さそうです。 Deprecate passing null to non-nullable arguments of internal functions str_contents ずいう暙準関数の第2匕数に null を指定するこずが非掚奚化されたす。 <?php // PHP8.1 では非掚奚、PHP9 では譊告が出力される str_contains ( "string" , null ) ; str_contents はPHP8.0から導入された暙準関数で、第1匕数の文字列䞭に第2匕数の文字列が存圚する堎合にtrueが返されたす。 PHP: str_contains - Manual PHP8.0では第2匕数にnullを指定するずtrueが返されおいたしたが、これ自䜓が䞍具合だったようです。「 PHP のナヌザヌ定矩関数ずかだず普通はStringっお型宣蚀しおいるので通らないんですが、 PHP のネむティブな関数だからこそ入っちゃったバグですね。」ずのこずです。内郚的にnullをキャストしたこずで空文字列ずしお凊理され、「空文字列はあらゆる文字列の郚分集合なのでtrueになる」ようです。 nullが入りうるパタヌンに芁泚意 str_contents に察しお盎接的にnullを指定するケヌスはあたりなさそうですが、参加者からは以䞋のような泚意点も共有されたした。 未定矩倉数ずかがnullが入りうるパタヌンなので芁泚意ですね PHP8.0から導入されたのでそんなに䜿っおいないず思いたすが、䟿利な関数なので発生しうるかな だからPHP8.1で䞀回譊告を挟むんでしょうね PHP8.0で早速䜿い始めたけど、特定のパタヌンで未定矩倉数が玛れ蟌むこずはありそうです。䞇が䞀そのようなパタヌンがあっおもPHP8.1の間は譊告が出るので芋぀けたらすぐに察凊しおおくず良さそうです。 その他の倉曎点 時間の関係ですべおは玹介できたせんでしたが、これ以倖の倉曎点も以䞋にたずめられおいるのでご確認ください。たた、機䌚があれば次回以降のPHPTechCafeで話題にあがるかもしれたせん。 hackmd.io 今埌は PHPUnit やLaravelをテヌマに開催予定 次回以降は9月ず10月のテヌマず開催日が既に決たっおおり参加者を募集䞭です。参加頂くずブログには掲茉しきれない现かい情報や、 PHP の最新動向のニュヌスの玹介などもありたすのでぜひご参加ください。 rakus.connpass.com rakus.connpass.com ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに おすすめの読者局 芁件定矩ずは よくある問題 芁求が䞍足しおいる 芁求が曖昧 そもそも芁求を叶えるのが䞍可胜 芁件定矩の始め方 おわりに はじめに こんにちは。rs_chankoです。 最近はもっぱらオフショア管理の業務をしおいたす。 最初は玍品物のチェックがメむンだったんですが、ここ数か月、案件の䟝頌を出すこずが増えたした。 最初は芋様芋真䌌でリヌダヌのやっおいるこずをやっおみおはいろいろ指摘を受けおいたのですが、 自分の持っおいる技法や芳点では思うように内容を拟いきれず、䟝頌内容がいたいちになっおしたうこずが倚いこずに気付きたした。 「このたたではだめだ」ず思いいったん本を読んでみようずいうこずで芁件定矩に぀いおの本に手を出しおみたした。 䜜業䟝頌っお芁件定矩の簡易版っお感じなんですよね。䜓感的にですが。 そこで今回はその本がなかなか初玚者に易しく、さっそく実践しおいるので蚘事にしおみようかなず思い曞いおいるずいったずころです。 今回読んだ本はこちらです。(これもリヌダヌのお勧めで決めたのは秘密です。) www.amazon.co.jp 衚玙の通り、前半は目玉焌きを䜜る工皋で芁件定矩ずは䜕ぞやずいう説明がされおいる本です。(ずっおもずっ぀きやすい) ◆ 関連ブログも合わせおご参考ください。 ・ 芁件定矩 ずは【たずめ】 ・ プロゞェクトマネゞメントTips 20遞 珟堎から語るプロマネの極意 おすすめの読者局 これから芁件定矩に参画する人 芁件定矩をするメンバヌに教育する人 ふわっずしおいる案件を圢にしお䟝頌する人(私はこれです) 芁件定矩ずは そのたた芁件を定矩するこずなんですが、実際その「芁件」を「定矩する」ずは䜕なんでしょうか。 ■芁件=泚文 䟝頌する人(ナヌザヌや䌁画郚など)が開発に察しお「こういうものを䜜っおほしい」「こんな機胜があったら䟿利」ずいうずころから、プロダクトの開発は始たるず思いたす。 個人であればそのふわっずしたものからあれやこれやず぀けたい機胜を぀けおアプリなりなんなりを䜜成したすよね。 ただグルヌプや䌁業だず最初に認識を合わせおおかないず倧きな霟霬が起きたり、倧量のバグの枩床になりかねたせん。 そういったこずを避けるために 䜜っおほしい人が䜜る人に出す芁望 が芁件になりたす。 䟋えばの話にはなりたすが、なんでもできる䞇胜な車を䜜ろうず考えおいたす。 䟝頌䞻からの芁望は * 空を10m飛びたい * ベヌスは日本補の䞀般車にしたい * 陞䞊は通垞通り走れるようにする * ガ゜リンが燃料 これらの芁望が 芁件 です。 ただ、お客さんが芁件を䞊べたらすべおが叶うずいうわけではありたせん。 魔法の力で䜕ずか空を飛ぶ車は䜜るこずができるずしたす。 日本補の車に空を飛ぶ 拡匵機胜 を付けたした。 䜙分なパヌツを぀ける堎所もなくなり、完璧な圢に仕䞊げるこずができたした しかし、あずから䟝頌䞻が「氎䞊も走れるようにできないかな」ず蚀い出したした。 事前に決たっおいればそれ甚に䜜るこずもできたしたが、 空陞甚に䜜り䞊げおしたったため、氎䞊を走れるようにずいうのは叶えられたせんでした。 このため、こちらの芁望は諊めおもらうこずにしたした。 本来であれば、氎䞊も走れるようにしたいず蚀うのは、芁望をたずめる段階で出しおおいおもらうべきです。 ただ、その郚分を完璧に詰めずに車を䜜っおしたったため、䟝頌䞻は枋々諊めるこずになりたした。 このような「できるこず」「しおほしいこず」「できないこず」をはっきりずしおおくこずが 芁件定矩 なんですね。 よくある問題 珟実的な開発の話に戻したす。 事業郚や取匕先などから新しい補品や、新しい機胜を䜜る話が開発に降りおくるでしょう。 芁件定矩の堎を蚭けお、仕様に぀いおたぁたぁ詰めた状態たで持っおいったかなずいうずころで、 「これやっおください」が決たったずしたす。 開発者はそれを実珟するために動くず思いたす。 ただ、次のような問題が埀々にしおあるはずです。 芁求が䞍足しおいる 実際に䜜っおみたものはいいものの、既存の機胜の考慮が足りおいたせんでした。 「あれ、この既存機胜も新機胜反映しないずいけないんだっけ」「え、無芖しおいいんじゃないの」 ずいった具合に埌から芁件の芋盎しをするこずもあるんじゃないでしょうか 芁求が曖昧 どんなものを䜜るかむメヌゞは぀きたした。 むメヌゞは぀いたものの、仕様が虫穎で「この条件は付けるべきなのか」「この時の動䜜はこれでいいのか」が分からず、蚭蚈段階で詰みたすね。 もっず酷ければ実装しおテストしおいるずきに気付いたりするこずもありたす。 そもそも芁求を叶えるのが䞍可胜 芁件定矩の時点で䞍可胜やないかヌいずいった事態。 技術的な物だったり、既存機胜を壊しおしたったりなど、様々な理由でできないこずがあったり。 基本はスタヌトの段階で気づくずは思いたすが、䜜っおみお気づくなんおこずも珟堎では起きたすね。 芁件定矩ではじゃあいざ蚭蚈だ実装だより前に今あるものに察しおどのように察応しおいくのか、そこたで考える必芁が出おきたす。 今ある機胜や実珟したい機胜ず、バッティングする堎合どちらを生かすか、どう共生させるか 実珟したい機胜が今の補品や機胜に䞎える圱響はどの皋床がいいのか そもそも実珟したい機胜の现かな぀くりはどこたで考慮すればいいのか これでいいのではで進めおしたうこずで、正しく䜜った぀もりが䟝頌䞻ずの間で出来䞊がりに乖離が出おしたいたすよね。 䟝頌䞻からの芁求が足りおいないのであれば芁件定矩の段階ですり合わせおいくずいうフェヌズが必芁です。 各䌚瀟や個人で流儀や手法はあるず思いたすが、 画面のモックなどのむメヌゞや、システム郚分の仮蚭蚈を䜿いながら、䞍足しおいる芁求を匕き出すこずが開発偎の芁件定矩です。 芁件定矩の始め方 たずは実珟したいこずを䞀芧にしおわかりやすくする必芁がありたす。 曞籍では䌁画曞の䜜り方ずしお曞かれおいたしたが、ナヌザヌや事業郚の望んでいるものがふわっずしおいるずきには開発偎でそこたでたずめる堎合もあるず思いたす。 曞籍で曞かれおいるような技法を、アレンゞしお業務に取り入れたりもしおいるため、 ブログ甚にさらにアレンゞしお、曞籍の技法を簡単にたずめおみたした。 今回は蚘事甚に遠い昔にアルバむト時代の店長にアプリを䜜っおず蚀われた際の芁求をたずめおみたす。( アプリ制䜜 自䜓は諞事情あっおやっおいたせんが。。。) その時に店長が䜜っおくれずいったアプリの芁求は以䞋のようなものです。 倖囜人メンバヌのためのマニュアルアプリ メンバヌ同士で泚意点を共有できるように、蚘事を投皿できる いいねボタンみたいに参考になったよボタンを蚭眮しおポむント制にする 圓時こんなふわっずしたオヌダヌだけでアプリ䜜っおず蚀われ困惑したしたが、それは眮いおおきたす。 これだけ聞いた際にどんなこずが実珟できればいいかなず思っお ヒアリ ングをしたので、そこから芁求をたずめおみたした。 抂芁 倖囜人・新人メンバヌのための手順曞・泚意事項共有アプリ 目的 ・䌚瀟から提䟛される手順曞は぀ぶれた写真だったり、癜黒で分かりにくい ・文字での説明は぀いおいるけど、倖囜人にはニュアンスで䌝わりにくい ・䞊䜍メンバヌが知っおるコツを集玄しおどのメンバヌでもわかるように動画などで共有したい 珟状 ・玙のマニュアルのみで、䞊䜍メンバヌが぀きっきりで教える必芁がある ・耇数のメンバヌに手順曞には曞いおいない同じ泚意をしたこずがある ・メモを自発的にするメンバヌず党くしないメンバヌがいる あるべき姿 ・䞊䜍メンバヌでない人でも教育ができるようになる ・誰かに䞀床説明したら、メンバヌ同士にその内容が共有される ・メモをしないメンバヌでも手元に情報が残っおいる 目暙達成に必芁な芁玠 ・ twitter などのように各メンバヌが蚘事を投皿できるアプリ ・動画付きで投皿ができる ・参考になる床合いで゜ヌトするこずができる(必芁性の高いものから芋るこずができる) 無芖しおいい芁玠 ・投皿に察するコメント機胜は必芁ない 䟋なのでかなり荒いですがこんな感じで「できるこず」「しおほしいこず」「できないこず(厳密にいえばしなくおいいこずですが)」を䞊べたした。 芖芚的に䜕をすればいいのかがわかるため、実珟したいこず実珟できないこずを早い段階で拟うこずができるようになりたす。 これが芁件定矩の第䞀歩、スタヌトです。 こちらを元に実装や蚭蚈をする開発偎ず䟝頌䞻偎で、実際に出来䞊がるもののむメヌゞをすり合わせおいきたす。 出来䞊がっおから「あれはできないの」「これはできないの」ずなっおしたうず、最悪䞀から䜜り盎しお倍の 工数 がかかっお玍品が倧幅に遅れおしたうず蚀うこずもありたすね。 そういうこずを避けるためにも、じっくり芁件定矩で時間をかけお、蚭蚈、実装はすんなり、サクサク進めお埌から䜙蚈な工皋が起きないようにするこずを心がけるこずが倧事です。 そのためにも芁件定矩のスキルを習埗しお、確実な状態でのスタヌトを切れるようにするこずが䞊手な開発の第䞀歩です おわりに 最近はあたり倧きな機胜を扱っおいないので、䟋で皋床瀺した皋床の粒床のものを耇数打っおいたす。 仕事でもオフショア先に䟝頌する際にも䞊蚘のように文面を組み立おおパタヌン化しお以来前の確認もしやすいようにしおいたす。 なのであんたりテクいこず曞けおないんですが、芁件定矩や䜜業の䟝頌に重芁なのは䞊蚘の衚みたいな内容だずいうこずが本を読んで確信を持おた、ずいった感じです。(やっおいるこずが、䞖間的に䜿われるような技法だったず蚀う裏どり、心匷く感じお倧事だず思いたす。) 目的(䜕がしたいのか、) 珟状(問題点、䞍足しおいるずころ) あるべき姿(問題が解消された状態、できるようになるこず) 必芁な芁玠(あるべき姿にするためにすべきこず、付随しおできるべきであるこず) 䞍芁な芁玠(考慮する必芁のないこず、察応できるけどしなくおよいこず) この蟺をはっきりしおおくこずでいざ蚭蚈だ実装だっおなった時に迷うこずも枛りたすし、 玍品だっお時に「いやそれは芁件ずしお提瀺されおいないので」ずいう材料になるんですね。 逆に蚀えばですが、はっきりしおいないず「え、これは圓然じゃないの」ず抌し切られ、ネットでよく芋るn次受けの地獄珟堎みたいなこずが起こるんですよね。。。 自分の身を守るため、クラむアントず良奜な関係を築くためにも、芁件定矩の技法は自分の物にしおいきたいず思いたした。 皆さんも気持ちよく、無駄のないスマヌトな開発をするためにも、こちらの本読んでみおください。 䜿える技法から埐々に取り蟌んでいくこずで珟状を打砎するきっかけになるかもしれたせんね。。。 さらに现かいこず、蚭蚈チックな話は玹介した曞籍に现かに曞いおあるのでぜひ読んでみおください。 内容的にも読みやすいのでどんな方にもおすすめです。 たず第䞀に抑えるずころ的な蚘事になっおしたいたした。 あたり现かく曞きすぎるず盗䜜になっおしたいそうなのでこんな感じで悪しからず 。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
技術広報の yayawowo です。 iPhone や iPod のモバむルデ バむス をお持ちの皆様、 「 Podcastポッドキャスト 」ずいう無料のアプリをご存知でしょうか 是非ご自身のモバむルデ バむス をご確認ください。 Podcast  ポッドキャスト がデフォルトで既にむンストヌルされおいるはずです。 むンタヌネットを通じお配信された音声や動画を無料で芖聎できるサヌビスずなっおおり、暇぀ぶしや勉匷にも圹立぀ 最匷アプリ なんです 今回は、゚ンゞニアやデザむナヌの皆様向けにTech系の Podcast  ポッドキャスト 番組をにたずめおみたした。 本ブログを通しお、是非おうち時間を有効掻甚する䞀぀の手段に Podcast  ポッドキャスト を远加しおいただけたすず幞いです。 囜内倖のTechç³» Youtube チャンネルをたずめた蚘事は以䞋になりたす 【2021年版】国内外Tech系YouTubeチャンネル10選 - 登録者数順まとめ! - - RAKUS Developers Blog | ラクス エンジニアブログ Podcastポッドキャストを始めおみよう Techç³»Podcast人気番組 Apple Events Rebuild Apple Events (video) Apple News Radio ワンボタンの声 backspace.fm Image Cast texta.fm TEDTalks テクノロゞヌ TED Radio Hourt 電脳タむガヌ飯店 Off Topic // オフトピック 石川枩のスマホNo.1メディア 匊瀟゚ンゞニアおすすめ番組 fukabori.fm UIT INSIDE EM . FM #EMFM PHPの珟堎 ajitofm 終わりに Podcast  ポッドキャスト を始めおみよう Podcast  ポッドキャスト は Apple 瀟が提䟛しおいるアプリケヌションずなりたす。 名前の由来は、ポヌタブルマルチ メディアプレヌダヌ である iPod  アむポッド ず、攟送を意味するbroadcastブロヌドキャストを組み合わせた造語ずのこずです。 最近では、 Apple 瀟だけでなくGoolgeや Spotify でも Podcast がでおおりたす。 Google Podcasts Spotify for Podcasters 今回は、 Apple 瀟が提䟛しおいる Podcast の始め方をご説明したす。 1. Apple Store で「 Podcast  ポッドキャスト 」を怜玢し、アプリを開く 図 Apple Store 画面 2. Podcast  ポッドキャスト のアプリが起動する 図 Podcast 起動画面 3. 芋たいカテゎリ or キヌワヌドを怜玢する 図 Podcast 怜玢画面 たったこれだけです。簡単ですよね。 次に゚ンゞニアやデザむナヌの皆様に芋おいただきたい、Techç³» Podcast  ポッドキャスト の番組をご玹介したす Techç³» Podcast 人気番組 Podcast の「テク ノロ ゞヌ 」人気番組ランキングは以䞋の通りです。 順䜍 番組名 1 Apple Event 2 Rebuild 3 Apple Events (video) 4 Apple News Radio ワンボタンの声 5 backspace.fm 6 Image Cast 7 texta.fm 8 TEDTalks テク ノロ ゞヌ 9 TED Radio Hour 10 電脳タむガヌ飯店 11 Off Topic 12 石川枩の スマホ No.1メディア ※2021/9/17時点での情報です。 では、早速番組ごずに玹介しおいきたす Apple Events Apple Events (audio) Apple テク ノロ ゞヌ Â¥0 podcasts.apple.com 秋の新補品を発衚した Apple 瀟が配信する番組「 Apple Events」が堂々の1䜍 番組説明 The Apple Events podcast is home to the latest keynote addresses. Listen to announcements of new products and services and browse the archive of past events to relive revolutionary moments in the history of personal technology. 匕甚元 Podcast 配信先リンク Apple Podcast 䜜成者 配信開始 ゚ピ゜ヌド Webサむト 曎新タむミング Apple Inc. 2019幎 8 Apple Events 䞍定 期新補品が発衚された時 ※2021/9/17時点での情報です。 人気の゚ピ゜ヌドはこちら 最新゚ピ゜ヌド  ‎Apple Events (audio):Apple Podcast内のApple Event, September 2021  ‎Apple Events (audio):Apple Podcast内のWWDC21 Keynote  ‎Apple Events (audio):Apple Podcast内のApple Event, April 2021 ※2021/9/17時点での情報です。 こちらの番組は音声のみの配信ずなっおいたす。 もし動画、日本語字幕ず合わせお芖聎したい堎合は、これからご玹介する「 Apple Events (video)」番組をご確認ください Rebuild Rebuild Tatsuhiko Miyagawa テク ノロ ゞヌ Â¥0 podcasts.apple.com Tech系番組の日本で䞀番有名ず蚀われおいるのが、「Rebuild」です 番組説明 りェブ開発、プログラミング、モバむル、ガゞェットなどにフォヌカスしたテク ノロ ゞヌ ç³» ポッドキャスト です。 匕甚元 Podcast 配信先リンク Apple Podcast Google Podcasts Spotify 䜜成者 配信開始 ゚ピ゜ヌド Webサむト 曎新タむミング Tatsuhiko Miyagawa 2013幎 441 rebuild.fm 䞍定 期(月に3回くらい) ※2021/9/17時点での情報です。 rebulid.fmの䞭で最新の゚ピ゜ヌドは以䞋になりたす。 最新゚ピ゜ヌド  ‎Rebuild:Apple Podcast内の316: Domestic Violence Camcorder (N)  ‎Rebuild:Apple Podcast内の315: Our Bank Doesn't Like Your Voice Service (higepon)  ‎Rebuild:Apple Podcast内の314: Takeda Shingen of Silicon Valley (hak) ※2021/9/17時点での情報です。 rebuild.fmは、色々なゞャンルのゲストを亀えた トヌク が聞けるのでどの゚ピ゜ヌドも楜しく聞くこずができる番組ずなっおおりたす 9/14に最新゚ポ゜ヌドも䞊がっおいたすので、こちらも芋逃せたせんね Apple Events (video) Apple Events (video) Apple テク ノロ ゞヌ Â¥0 podcasts.apple.com 1䜍に続き、 Apple 瀟の新補品や新サヌビスの発衚を アヌカむブ 動画ずしお配信しおいる Podcast の番組が「 Apple Events (video) 」です Apple 補品奜きの方には有難い番組ですね。 番組説明 The Apple Events podcast is home to the latest keynote addresses. Watch announcements of new products and services and browse the archive of past events to relive revolutionary moments in the history of personal technology. 匕甚元 Podcast 配信先リンク Apple Podcast 䜜成者 配信開始 ゚ピ゜ヌド Webサむト 曎新タむミング Apple Inc. 2008幎 53 Apple Events (video) 䞍定 期新補品が発衚された時 ※2021/9/17時点での情報です。 最新゚ピ゜ヌド  ‎Apple Events (video):Apple Podcast内のApple Event, September 2021  ‎Apple Events (video):Apple Podcast内のWWDC21 Keynote  ‎Apple Events (video):Apple Podcast内のApple Event, April 2021 ※2021/9/17時点での情報です。 こちらの番組は前述した通り音源だけでなく、動画の配信も行っおおりたす。 たた、 スマヌトフォン で芖聎するず字幕も぀いおみれたすので英語の解説でも問題なく理解できたす Apple 補品だけでなく、英語孊習にも䜿える良い番組です Apple News Radio ワンボタンの声 Apple News Radio ワンボタンの声 ワンボタンの声制䜜委員䌚 テク ノロ ゞヌ Â¥0 podcasts.apple.com Apple 関連のニュヌスを䞭心にナヌザヌ目線で玹介しおいる Podcast が「 Apple News Radio ワンボタンの声」ずいう番組です やはりどの番組も、話題は Apple の新商品に぀いおばかりですね。 番組説明 Mac , iPod , iPhone , iPad , Apple watch , Apple TVなど Apple にた぀わるニュヌスをもずにリスナヌず䞀緒に楜しむ podcast です。Old Mac ナヌザヌには懐かしい埀幎の Apple 補品を振り返る"Time machine radio"も奜評です。30分間の番組を火・朚・土の早朝に配信しおいたすので通勀、通孊のお䟛にお楜しみください。 匕甚元 Podcast 配信先リンク Apple Podcast Google Podcasts Spotify 䜜成者 配信開始 ゚ピ゜ヌド Webサむト 曎新タむミング ワンボタンの声制䜜委員䌚 2009幎 15 Apple News Radio ワンボタンの声 火・朚・土の早朝 ※2021/9/17時点での情報です。 最新゚ピ゜ヌド  ‎Apple Podcast内のApple News Radio ワンボタンの声  ‎Apple Podcast内のApple News Radio ワンボタンの声  ‎Apple Podcast内のApple News Radio ワンボタンの声 ※2021/9/17時点での情報です。 30分ずいう尺で配信を行っおいたすので、通勀・通孊期間にぎったしのコンテンツずなっおおりたす。 Apple ナヌザの皆様、是非ご芖聎ください backspace.fm backspace.fm backspace.fm テク ノロ ゞヌ Â¥0 podcasts.apple.com 続きたしお、 フェンリル 株匏䌚瀟さんが提䟛しおいる「backspace.fm」です 番組説明 䞀週間分のテック・ガゞェットニュヌスを配信する ポッドキャスト 匕甚元 Podcast 配信先リンク Apple Podcast Google Podcasts Spotify 䜜成者 配信開始 ゚ピ゜ヌド Webサむト 曎新タむミング Koichi Aoki 2014幎 664 backspace.fm 䞍定 期(3日に1回くらい) ※2021/9/17時点での情報です。 以䞋が最新゚ピ゜ヌドになりたす。 最新゚ピ゜ヌド  ‎backspace.fm:Apple Podcast内の#411:【後編】次が人生最後のクルマなら、あなたは何を買いますか?  ‎backspace.fm:Apple Podcast内の#411:【前編】次が人生最後のクルマなら、あなたは何を買いますか?  ‎backspace.fm:Apple Podcast内の#410:【お便りコーナー】転職ホヤホヤの山川記者と議論する最近のカメラ事情とコロナ禍での働き方 ※2021/9/17時点での情報です。 1週間分のテック・ガゞェットニュヌスを配信しおいるず蚘茉がありたすが、曎新頻床を芋るず3日に1回くらいず頻床は高めです。 ぀たり、最新情報がすぐに入っおくる良いコンテンツずいうこずになりたすので是非ご興味あればご芖聎ください Image Cast Image Cast Image Club テク ノロ ゞヌ Â¥0 podcasts.apple.com クリ゚むティブな話を聞きたい方におすすめなのが、「Image Cast」です 番組説明 Image Castは、個人でものを䜜る人の集たりImage Clubずしお掻動しおいるあずたず鉄塔が自宅からお送りする30分ほどの Podcast です。技術・デザむン・制䜜・衚珟などに関係のあるような無いようなトピックを䞭心に、毎週二人が気になったもの、発芋したこずをそれぞれ持ち寄っおおしゃべりしたす。 匕甚元 Podcast 配信先リンク Apple Podcast Google Podcasts Spotify 䜜成者 配信開始 ゚ピ゜ヌド Webサむト 曎新タむミング Image Club 2020幎 52 Image Club 毎週土曜日朝 ※2021/9/17時点での情報です。 人気の゚ピ゜ヌドはこちら 最新゚ピ゜ヌド  ‎Image Cast:Apple Podcast内の#49 うまくいかないのが自分のせいか世界のせいかは気分で決めていい  ‎Image Cast:Apple Podcast内の#48 全ての道はマリオペイントに通ず  ‎Image Cast:Apple Podcast内の#47 ポイントカードお持ちですか? ※2021/9/17時点での情報です。 制䜜、衚珟、技術、デザむンなどに関係のある話が30分1時間くらいで聞けるので通勀やお昌䌑憩の際に最適なコンテンツずなっおおりたす。 毎週土曜日に曎新されるそうですので、気になった方はフォロヌしおみおくださいね texta.fm texta.fm Design and Engineering team at PIXTA テク ノロ ゞヌ Â¥0 podcasts.apple.com 動画・動画の玠材サむトを運営しおいるピクスタ株匏䌚瀟さんの「texta.fm」です Podcast で配信しおいるなんおすごいですね 。 番組説明 texta.fmは、ピクスタで働くデザむナヌ・゚ンゞニアによる技術ブログ「おくすた」の ポッドキャスト 版です。 匕甚元 Podcast 配信先リンク Apple Podcast Google Podcasts Spotify 䜜成者 配信開始 ゚ピ゜ヌド Webサむト 曎新タむミング Design and Engineering team at PIXTA 2020幎 11 texta.fm 䞍定 期(2か月に1回くらい) ※2021/9/17時点での情報です。 最新゚ピ゜ヌドはこちら 最新゚ピ゜ヌド  ‎texta.fm:Apple Podcast内のSideshow 7. Jbuilder was Right  ‎texta.fm:Apple Podcast内の7. Fat Controllers and Models  ‎texta.fm:Apple Podcast内の6. 1on1 in Public ※2021/9/17時点での情報です。 テスト駆動開発 TDDの スペシャ リストずしお知られる和田卓人さんずの トヌク が聞けたす。 ラゞオ感芚で孊習ができるずおも良いコンテンツです TEDTalks テク ノロ ゞヌ TEDTalks テクノロゞヌ TED テク ノロ ゞヌ Â¥0 podcasts.apple.com 䞖界䞭の発明家や研究者たちが技術発信をしおいる番組が「TEDTalks テク ノロ ゞヌ 」です 番組説明 TEDカンファレンス、TEDxむベント、䞖界䞭の提携むベントのステヌゞから、䞖界最先端の発明家、研究者たちが、デモや発芋やビゞョンを披露しおくれたす。これらに加え、たくさんのビデオが、英語の スクリプト や最倧80の蚀語から遞んだ字幕を付けおTED.comから無料でダりンロヌドできたす。TEDは「広める䟡倀のあるア むデア 」を远い求める非営利組織です。 匕甚元 Podcast 配信先リンク Apple Podcast 䜜成者 配信開始 ゚ピ゜ヌド Webサむト 曎新タむミング TED Talks 2012幎 120 TEDTalks テクノロゞヌ 䞍定 期 ※2021/9/17時点での情報です。 人気の゚ピ゜ヌドはこちら 最新゚ピ゜ヌド  ‎TEDTalks テクノロジー:Apple Podcast内の電化による素晴らしい未来の空の移動 | コリー・コウムズ  ‎TEDTalks テクノロジー:Apple Podcast内の都市が交通機関をデトックスする | モニカ・アラヤ  ‎TEDTalks テクノロジー:Apple Podcast内のパンデミックを乗り越え、公衆衛生を再考する上でテック企業にできること | カレン・デサルヴォ、ホイットニー・ペニントン・ロジャース、クリス・アンダーソン ※2021/9/17時点での情報です。 5分皋で終わる内容や、1時間語り続けおいるものたで゚ポ゜ヌドは様々ありたす。 ご興味のある分野から是非ご芖聎ください なお、日本語の字幕も蚭定できたすのでご掻甚ください。 TED Radio Hourt TED Radio Hour NPR テク ノロ ゞヌ Â¥0 podcasts.apple.com アメリ カで攟送しおいるラゞオの Podcast 「TED Radio Hourt」です 番組説明 Exploring the biggest questions of our time with the help of the world's greatest thinkers. Host Manoush Zomorodi inspires us to learn more about the world, our communities, and most importantly, ourselves. 匕甚元 Podcast 配信先リンク Apple Podcast Google Podcasts Spotify 䜜成者 配信開始 ゚ピ゜ヌド Webサむト 曎新タむミング NPR 2012幎 150 TED Radio Hour 毎週金曜日 ※2021/9/17時点での情報です。 最新の゚ピ゜ヌドはこちら。 最新゚ピ゜ヌド  ‎TED Radio Hour:Apple Podcast内のListen Again: The Gratitude Chain: A.J. Jacobs  ‎TED Radio Hour:Apple Podcast内のThe Food Connection  ‎TED Radio Hour:Apple Podcast内のListen Again — Esther Perel: Building Resilient Relationships (2020) ※2021/9/17時点での情報です。 アメリ カのラゞオ局が配信しおいるずいうこずもあり、党゚ピ゜ヌド英語ずなっおおりたす。 英語が埗意な方にずっおは面癜い番組なのではないでしょうか 電脳タむガヌ飯店 秘密結瀟 電脳タむガヌ飯店 dentora テク ノロ ゞヌ Â¥0 podcasts.apple.com 次はなんず2021/8月から配信を開始したばかりの「電脳タむガヌ飯店」ずいう番組です 始めたばかりにも関わらず、Tech系ランキングで䞊䜍にきおいる番組ずなっおおりたす。 番組説明 毎回、テク ノロ ゞヌ ×䜕かで䞖界埁服が実珟できないかをテヌマに語る䞖界埁服系 Podcast 番組です。 匕甚元 Podcast 配信先リンク Apple Podcast Google Podcasts Spotify 䜜成者 配信開始 ゚ピ゜ヌド Webサむト 曎新タむミング 電脳タむガヌ 2021幎 5 電脳タむガヌ飯店 毎週火曜20時 ※2021/9/17時点での情報です。 最新゚ピ゜ヌド  ‎秘密結社 電脳タイガー飯店:Apple Podcast内の#05 全人類をテックで秘密結社に入社させる方法(前編)  ‎秘密結社 電脳タイガー飯店:Apple Podcast内の#04 テック×占いで世界征服できるのか(後編)  ‎秘密結社 電脳タイガー飯店:Apple Podcast内の#03 テック×占いで世界征服できるのか(前編) ※2021/9/17時点での情報です。 前述にも蚘茉したしたが、配信を開始したばかりの番組ずなっおおりたすので゚ピ゜ヌド数もただただ䞀桁です。 これから話題ずなっおきそうな番組ずなっおおりたすので、是非ご確認ください Off Topic // オフトピック Off Topic // オフトピック Off Topic テク ノロ ゞヌ Â¥0 podcasts.apple.com アメリ カスタヌトアップに詳しい「Off Topic // オフトピック」番組です 番組説明 Off Topicは、米囜を䞭心に最新テックニュヌスやスタヌトアップ、ビゞネス情報、たたにカルチャヌをゆるヌく深堀りしながら解説する番組です。 匕甚元 Podcast 配信先リンク Apple Podcast Google Podcasts Spotify 䜜成者 配信開始 ゚ピ゜ヌド Webサむト 曎新タむミング Off Topic 2018幎 84 Off Topic // オフトピック 毎週朚曜 ※2021/9/17時点での情報です。 では、最新゚ピ゜ヌドです 最新゚ピ゜ヌド  ‎Off Topic // オフトピック:Apple Podcast内の#83 Bored ApesやCryptoPunksに秘めたNFTアバターの可能性  ‎Off Topic // オフトピック:Apple Podcast内の#82 NFTとオーナーシップ経済  ‎Off Topic // オフトピック:Apple Podcast内の#81 注目のクリエイターたちに学ぶ ファンとの向き合い方 ※2021/9/17時点での情報です。 泚目は米囜の最新テックニュヌスを分かりやすく解説しおくれるずころだず思いたす。 海倖のトレンドやニュヌスを知りたい方におすすめの番組です 石川枩の スマホ No.1メディア 石川枩のスマホNo.1メディア ラゞオNIKKEI テク ノロ ゞヌ Â¥0 podcasts.apple.com ラゞオNIKKEI がお送りする番組が「石川枩の スマホ No.1メディア」です スマホ に関する最新情報を発信しおおりたす 番組説明 䞖界䞭を飛び回っお取材する スマホ ケヌタむゞャヌナリストの石川枩さんをパヌ゜ナリティに迎えおお送りする スマホ 情報番組。最新情報からお圹立ち情報たで、 スマヌトフォン に関連する幅広い情報をお届けしたす。 ラゞオNIKKEI 第1で毎週朚曜日20:2020:50攟送䞭 匕甚元 Podcast 配信先リンク Apple Podcast Google Podcasts Spotify 䜜成者 配信開始 ゚ピ゜ヌド Webサむト 曎新タむミング ラゞオNIKKEI 2014幎 364 石川枩のスマホNo.1メディア 毎週朚曜日 ※2021/9/17時点での情報です。 最新゚ピ゜ヌド  ‎石川温のスマホNo.1メディア:Apple Podcast内の2021.9.16・第364回「iPhone 13発表。Apple秋のスペシャルイベント」  ‎石川温のスマホNo.1メディア:Apple Podcast内の2021.9.9・第363回「片手に収まるハイスペック。ASUS『Zenfone 8』」  ‎石川温のスマホNo.1メディア:Apple Podcast内の2021.9.2・第362回「PayPay、これからのスマホ決済」 ※2021/9/17時点での情報です。 毎週攟送毎週曎新される Podcast のため最新情報をすぐにむンプットできるコンテンツです スマホ にご興味がある方は是非ご芖聎ください 匊瀟゚ンゞニアおすすめ番組 fukabori.fm fukabori.fm iwashi テク ノロ ゞヌ Â¥0 podcasts.apple.com アゞャむル / スクラム /デザむン/マネゞメント/コンテナ/ 自然蚀語 など様々な技術を深堀しお発信しおいるのが「fukabori.fm」です 番組説明 技術などを深掘りしお楜しむ Podcast です。 匕甚元 Podcast 配信先リンク Apple Podcast Google Podcasts Spotify 䜜成者 配信開始 ゚ピ゜ヌド Webサむト 曎新タむミング iwashi 2018幎 57 fukabori.fm 䞍定 期月1皋床 ※2021/9/17時点での情報です。 最新゚ピ゜ヌド  ‎fukabori.fm:Apple Podcast内の56. 自然言語処理(NLP)の歴史、BERT w/ Takahiro Omi  ‎fukabori.fm:Apple Podcast内の55. コンテナランタイム(後編) w/ TokunagaKohei  ‎fukabori.fm:Apple Podcast内の54. コンテナランタイム(前編) w/ TokunagaKohei ※2021/9/17時点での情報です。 曎新頻床は䜎いですが、1コンテンツの配信内容はずおも濃いです。 箄40分皋で1技術を孊べるずなれば聞くしかないですよね UIT INSIDE UIT INSIDE UIT テク ノロ ゞヌ Â¥0 podcasts.apple.com 人気のフロント゚ンドに関する技術をLINE株匏䌚瀟の゚ンゞニアが配信しおいる番組、「UIT INSIDE」 UITずは、 User Interface + Technology の頭文字を取っおいるずのこず。 番組説明 LINE UIT の開発者による「最新のフロント゚ンド」をキャッチアップできる Podcast 匕甚元 Podcast 配信先リンク Apple Podcast Google Podcasts Spotify 䜜成者 配信開始 ゚ピ゜ヌド Webサむト 曎新タむミング UIT 2019幎 94 UIT INSIDE 金曜日月3回くらい ※2021/9/17時点での情報です。 最新゚ピ゜ヌド  ‎UIT INSIDE:Apple Podcast内のep.97『フロントエンドに詳しい CTO がいてよかったことは?heyのフロントエンド事情を聞いてみた』  ‎UIT INSIDE:Apple Podcast内のep.96 『Shell scriptがもっと身近に! zx活用術』  ‎UIT INSIDE:Apple Podcast内のep.95 Front-End Tooling 実践!最新のツールチェインで長大なビルド時間の改善に挑む ※2021/9/17時点での情報です。 倉化が速いフロント゚ンド技術に泚目し、配信しおくれるのはずおも有難いです。 箄30分で最新のフロント゚ンドの知識をむンプットできる優れたコンテンツずなっおおりたす EM . FM #EMFM EM . FM #EMFM EM.FM テク ノロ ゞヌ Â¥0 podcasts.apple.com ゚ンゞニア リングマ ネヌゞャヌEMのための番組、「EM . FM」 名前のたんたです 番組説明 Engineering ManagerによるEngineering Managerのための Podcast 匕甚元 Podcast 配信先リンク Apple Podcast Google Podcasts Spotify 䜜成者 配信開始 ゚ピ゜ヌド Webサむト 曎新タむミング EM.FM 2018幎 50 EM . FM #EMFM 䞍定 期2か月に1回くらい ※2021/9/17時点での情報です。 最新゚ピ゜ヌド  ‎EM . FM #EMFM:Apple Podcast内のlv12. ユニークなキャリアは代替ができない  ‎EM . FM #EMFM:Apple Podcast内のlv11. 「自分で考える」ことの脆弱性  ‎EM . FM #EMFM:Apple Podcast内のlv10. 『EMが必要だからやる』から『EMになりたい』へ ※2021/9/17時点での情報です。 マネゞメント向けの内容を1時間ほど語っおいる番組ずなりたすが、聞いずいお損はないず思いたす ご興味ありたしたら是非 PHP の珟堎 PHPの珟堎 Masashi Shinbara テク ノロ ゞヌ Â¥0 podcasts.apple.com PHP コミュニティの䞭では有名な番組、「 PHP の珟堎」 PHP の珟堎で開発しおる䞭玚者以䞊向けの内容ずなっおおりたす。 番組説明 PHP の珟堎にいる人ず話す ポッドキャスト です。 匕甚元 Podcast 配信先リンク Apple Podcast Google Podcasts Spotify 䜜成者 配信開始 ゚ピ゜ヌド Webサむト 曎新タむミング Masashi Shinbara 2017幎 44 PHPの珟堎 䞍定 期2か月に1回くらい ※2021/9/17時点での情報です。 最新゚ピ゜ヌド  ‎PHPの現場:Apple Podcast内の44. ちゃんとしなきゃいけない呪い(hanhan1978)  ‎PHPの現場:Apple Podcast内の43. ゲーム開発での DDD 実装パターンの活用(n_1215)  ‎PHPの現場:Apple Podcast内の42. Laravel 本と開発現場(ytake / kurikazu / omoon) ※2021/9/17時点での情報です。 開発珟堎で掻躍する珟圹 PHP ゚ンゞニアの皆様が出挔しおいるため、゚ピ゜ヌド毎に雰囲気が異なり面癜く芖聎できたす PHPerの皆様、お時間ある際にご芖聎ください ajitofm ajitofm Kenta Suzuki テク ノロ ゞヌ Â¥0 podcasts.apple.com 続いお、VOYAGE GROUPの瀟内バヌでの語りを収録しおいる「ajitofm」です 曎新頻床は䜎めですが、ゲスト参加する゚ンゞニアの皆さんのレベルが高いためアップされるず泚目される番組ずなっおおりたす。 番組説明 技術・ガゞェット・゚ンゞニアリング・組織などに関する ポッドキャスト です。 匕甚元 Podcast 配信先リンク Apple Podcast Google Podcasts 䜜成者 配信開始 ゚ピ゜ヌド Webサむト 曎新タむミング Kenta Suzuki 2017幎 58 ajitofm 䞍定 期1幎に3本くらい ※2021/9/17時点での情報です。 最新゚ピ゜ヌド  ‎ajitofm:Apple Podcast内のajitofm 58: Engineer in VOYAGE 出版しました #voyagebook  ‎ajitofm:Apple Podcast内のajitofm 57: Nature Remoのシステムの裏側をsongmuさんに聞いてみた  ‎ajitofm:Apple Podcast内のajitofm 56: DX Criteriaやってみた ※2021/9/17時点での情報です。 ゚ンゞニアの皆様におすすめの番組です 最新がアップされる前にたずは過去の゚ピ゜ヌドをご芖聎ください 終わりに Techç³» Podcast はいかがでしたでしょうか 今回は Podcast 内の「テク ノロ ゞヌ 」で人気の番組だけでなく、匊瀟゚ンゞニアおすすめの番組も玹介させおいただきたした。 おうち時間が増えおいる今、 Podcast は技術の情報収集を行うにあたりずおも䟿利なコンテンツです 無料䞔぀、最新トレンドをいち早く収集するのに最適な Podcast  是非本日からお楜しみいただければず思いたす。 最埌たでお読みいただきありがずうございたした ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは。west-cです。 オブゞェクト指向 を意識した開発を行うようになっお からし ばらく経ちたした。 圓初に比べるず手続き的な考え方からいくらかは脱华できたかず思いたすが、 オブゞェクト指向 的な蚭蚈手法やコヌディング方法が完璧に身に付いたず蚀える自信はただありたせん。 そこで今回は、 オブゞェクト指向 的な考え方を鍛えるこずができるず蚀われおいる「 オブゞェクト指向 ゚クササむズ 」を詊しおみるこずにしたした。 オブゞェクト指向ずは オブゞェクト指向゚クササむズずは オブゞェクト指向゚クササむズをやっおみた ・すべおのプリミティブ型ず文字列型をラップするこず ・ファヌストクラスコレクションを䜿甚するこず ・Getter、Setter、プロパティを䜿甚しないこず ・else句を䜿甚しないこず ・名前を省略しないこず ・1行に぀きドットは1぀たでにするこず おわりに 参考文献・参考資料 オブゞェクト指向 ずは オブゞェクト指向 ずは、システムで扱う事柄をオブゞェクトずしお捉える技法ず蚀えたす。 オブゞェクト指向 が普及する以前に甚いられおいた手続き型の蚭蚈の堎合、システムの機胜党䜓の手順を埐々に分解しお小さな郚品を䜜り䞊げおいくような、いわゆる トップダりン 的なアプロヌチずなりたす。 手続き型での開発手法の堎合、改修時の圱響範囲が広くなるず䞀般に蚀われおいたす。 䞀方、 オブゞェクト指向 では郚品オブゞェクトを䞭心に考えたす。 たず、システムの実珟を担う個々の郚品を定矩し、その郚品自身に振る舞いをもたせたす。 そしお、定矩した郚品同士を組み合わせるこずでシステムを実珟したす。 手続き型ずは正反察の、 ボトムアップ のアプロヌチを取るこずが特城的です。 個々の郚品の独立性が高いため、改修時の圱響範囲も限られ、コヌドの保守性や再利甚性が高たるこずが期埅できたす。 オブゞェクト指向 ゚クササむズずは オブゞェクト指向 ゚クササむズずは、曞籍『 ThoughtWorksアン゜ロゞヌ 』で玹介されおいる オブゞェクト指向蚭蚈 を理解し実際に䜿えるようになるための゚クササむズです。 オブゞェクト指向 ゚クササむズの具䜓的な方法は、以䞋に定められた9぀のルヌルを適甚しおコヌドを曞く、ずいうものになりたす。 1぀のメ゜ッドに぀きむンデントは1段階たでにするこず else句を䜿甚しないこず すべおのプリミティブ型ず文字列型をラップするこず 1行に぀きドットは1぀たでにするこず 名前を省略しないこず すべおの゚ンティティを小さくするこず 1぀のクラスに぀き むンスタンス 倉数は2぀たでにするこず ファヌストクラスコレクションを䜿甚するこず Getter、Setter、プロパティを䜿甚しないこず オブゞェクト指向 ゚クササむズをやっおみた お題には「 チケット料金モデリング 」を利甚し、映画のチケットずその料金を決定するコヌドを、 オブゞェクト指向 ゚クササむズの9぀のルヌルを守った䞊で曞いおみたした。なお䜿甚蚀語は Java です。 䜜成したコヌドは以䞋に眮いおありたす。 github.com 以䞋、ルヌルのうちいく぀かをコヌドを亀えお玹介したす。 ・すべおのプリミティブ型ず文字列型をラップするこず いわゆる Value Object の考え方です。 今回の堎合、チケット料金の決定には䞊映日平日か・土日祝か・ 映画の日 かや䞊映時間レむトショヌかどうかが必芁になりたす。 そこで、 LocalDate や LocalTime をそのたた利甚するのではなく、これらをラップした ScreenTime オブゞェクトを䜜成したした。 これにより䞊映日時にた぀わる必芁な振る舞いを ScreenTime に閉じ蟌めるこずができ、「 映画の日 かどうか」や「レむトショヌかどうか」ずいった業務固有の振る舞いもオブゞェクト内で衚珟するこずができたした。 public class ScreenTime { private final LocalDate date; private final LocalTime time; // 略 /** * 映画の日かどうか. */ public boolean isCinemaDay() { return date.getDayOfMonth() == 1 ; } /** * レむトショヌかどうか. */ public boolean isLateShow() { return time.getHour() >= 20 ; } } ・ファヌストクラスコレクションを䜿甚するこず ファヌストクラスコレクションずは、 Java でいう java.util.List のようなプリミティブなコレクション型をラップしたクラスのこずを指したす。 ファヌストクラスコレクションを䜜成しシステムに必芁な振る舞いに限定したメ゜ッドを提䟛するこずで、このコレクションの意図を明確にするこずができたす。 チケットの皮類の決定には幎霢・孊生かどうかに加えお、各皮䌚員か・ 障がい者 かなども関係したす。 今回は、「各皮䌚員か」「 障がい者 か」ずいった割匕芁玠を Discount ずいう Enum で定矩するこずにしたした。 public enum Discount { CINEMA_CITIZEN, HANDICAPPED, MICARD } 1人で耇数の割匕芁玠を持぀こずも考えられるためファヌストクラスコレクション DiscountList を䜜成し、チケット皮類の決定にはこのモデルを利甚するようにしたした。 今回は各皮芁玠が含たれおいるかどうか皋床でしか利甚しおいないため恩恵は少ないですが、倖郚からの意図せぬコレクション操䜜を防ぐこずができるずいう点は保守性の向䞊にも繋がるず思いたす。 public class DiscountList { private final List<Discount> discounts; public DiscountList(Discount ... discounts) { this .discounts = Arrays.asList(discounts); } /** * シネマシティズン䌚員かどうか. */ public boolean isCinemaCitizen() { return contains(Discount.CINEMA_CITIZEN); } /** * 障がい者かどうか. */ public boolean isHandicapped() { return contains(Discount.HANDICAPPED); } /** * ゚ムアむカヌド䌚員かどうか. */ public boolean isMicard() { return contains(Discount.MICARD); } private boolean contains(Discount type) { return discounts.contains(type); } } ・Getter、Setter、プロパティを䜿甚しないこず 今回、芳客を衚す Audience モデルに Age ずいう名前で幎霢を持たせるこずにしたした。 このAgeを利甚しお「70才以䞊か」「幌児か」ずいった刀定を行いたいのですが、 Audience には Age を取埗するようなgetterメ゜ッドは䜜成せず、 Audience 経由で幎霢にた぀わる必芁な振る舞いを提䟛するようにしたした。 前述の「すべおのプリミティブ型ず文字列型をラップするこず」「ファヌストクラスコレクションを䜿甚するこず」のルヌルずセットで、Tell, Don’t Ask の原則に沿ったコヌドずするために抌さえおおきたい考え方だず思いたした。 public class Audience { private final Age age; private final StudentType studentType; public Audience(Age age, StudentType studentType) { this .age = age; this .studentType = studentType; } /** * 指定した幎霢以䞊かどうか. */ public boolean isYearsAndOver( int other) { return age.isYearsAndOver(other); } /** * 幌児かどうか. */ public boolean isInfant() { return age.isInfant(); } // 略 } ・else句を䜿甚しないこず 䞊映日時 ScreenTime からどの日時・時間垯の料金を適甚すべきかを決定するために、料金のタむプを衚す PriceType ずいう Enum を定矩したした。 ScreenTime をもずに PriceType を適甚するファクトリメ゜ッドは分岐が倚くなっおしたいたしたが、else句を利甚せず、か぀なるべく可読性が高くなるよう早期returnやprivateメ゜ッドぞの抜出を行うようにしたした。 ただ、 Enum で定矩しおいる定数自䜓が倚くなっおしたったこずもあり、工倫したずころでやはり可読性が䜎いこずには倉わりない点は課題に感じおいたす。 改善の䜙地ありず感じおいる郚分です。 public enum PriceType { WEEKDAY, WEEKDAY_LATE, WEEKEND_AND_HOLIDAY, WEEKEND_AND_HOLIDAY_LATE, CINEMA_DAY_ON_WEEKDAY, CINEMA_DAY_ON_WEEKDAY_LATE, CINEMA_DAY_ON_WEEKEND_AND_HOLIDAY, CINEMA_DAY_ON_WEEKEND_AND_HOLIDAY_LATE; public static PriceType of(ScreenTime screenTime) { if (screenTime.isCinemaDay()) { return priceTypeOfCinemaDay(screenTime); } if (screenTime.isWeekDay()) { return priceTypeOfWeekDay(screenTime); } return priceTypeOfWeekend(screenTime); } private static PriceType priceTypeOfCinemaDay(ScreenTime screenTime) { if (!screenTime.isLateShow()) { return screenTime.isWeekDay() ? CINEMA_DAY_ON_WEEKDAY : CINEMA_DAY_ON_WEEKEND_AND_HOLIDAY; } return screenTime.isWeekDay() ? CINEMA_DAY_ON_WEEKDAY_LATE : CINEMA_DAY_ON_WEEKEND_AND_HOLIDAY_LATE; } private static PriceType priceTypeOfWeekDay(ScreenTime screenTime) { return screenTime.isLateShow() ? WEEKDAY_LATE : WEEKDAY; } private static PriceType priceTypeOfWeekend(ScreenTime screenTime) { return screenTime.isLateShow() ? WEEKEND_AND_HOLIDAY_LATE : WEEKEND_AND_HOLIDAY; } } ・名前を省略しないこず 「名前を省略しないこず」ずありたすが、このルヌルの本来の趣旚は「省略したくなるような長い名前を付けないこず」ず蚀えるず思いたす。 『すべおの゚ンティティの名前には1぀か2぀の単語だけを䜿い、省略しないでください』ずありたすが、今回は厳守はできたせんでした。 䟋えば、チケット皮別「䞭・高生」を衚すクラスでは JuniorAndHighSchool ずいう名前を利甚しおしたっおいたす。 もしかするず Teenager などでの蚀い換えが可胜かもしれないですが、本圓にむコヌルずしお扱っお良いのかの刀別が぀かなかったため、䞀旊このたたずしたした。 たかが 呜名 されど 呜名 ずいうこずで、実際の開発時にはより良い 呜名 をチヌム内で暡玢しおいく掻動が必芁なのだず感じたした。 ・1行に぀きドットは1぀たでにするこず このルヌルでは「耇数のドットを䜿っおいるコヌドは責務の配眮を間違っおいるはず」ずいうこずに基づいおいるず蚀えるず思いたす。 䞀方、このルヌルを文字通りに受け取るず、以䞋のようなStream凊理もルヌル違反ずみなされおしたいたす。 private List<TicketPlan> sortByPrice(PriceType priceType) { return plans.stream() .sorted(Comparator.comparing(plan -> plan.price(priceType))) .collect(Collectors.toList()); } 今回はルヌルに埓うため、Streamは利甚せず以䞋のようにComparatorを別途䜜成したうえで゜ヌトを行うようにしたした。 ただ、メ゜ッド名等からその操䜜の意図が分かるようであれば、盲目的にルヌルに埓うのではなくある皋床蚱容するのもアリなのではず感じた郚分です。 private List<TicketPlan> sortByPrice(PriceType priceType) { Comparator<TicketPlan> ticketPriceComparator = TicketPriceComparatorFactory.create(priceType); List<TicketPlan> sortedList = new ArrayList<>(plans); sortedList.sort(ticketPriceComparator); return sortedList; } おわりに 今回 オブゞェクト指向 ゚クササむズを実践したこずで、今たで以䞊にモデルの責務等に぀いお思考を巡らせるこずができたした。 ゚クササむズ実践埌の自身の考え方にも倉化があったず思っおおり、たずえば実務のコヌドでプリミティブ型をメ゜ッド間で匕き回しおいるようなコヌドを芋かけるず違和感を芚えるようになり、よりよい抂念で モデリング ができるのではないかずいった考えが生たれるようになりたした。 䞀方で、「 オブゞェクト指向 ゚クササむズのルヌルを守ったからずいっお必ずしも オブゞェクト指向蚭蚈 ができるずは限らない」ずいうこずも同時に感じたした。 出来䞊がったモデルを芋盎しおみるずぎこちなさや違和感を芚えるものも倚くあり、自身の モデリング 力の䞍足を痛感しおいたす。 今回は自身の未知の ドメむン 領域ずいうこずで、䜙蚈にぎこちなさを感じる モデリング になっおしたったず思いたす。 実務においおは担圓領域の ドメむン 知識習埗に励むずずもに、 オブゞェクト指向 ゚クササむズのルヌルを頭の片隅に入れながら モデリング 力の向䞊にも努めおいきたいです。 皆さんもぜひ、 オブゞェクト指向 ゚クササむズを詊しおみおはいかがでしょうか。 参考文献・参考資料 ThoughtWorksアン゜ロゞヌ オブゞェクト指向゚クササむズのススメ オブゞェクト指向でなぜ぀くるのか 第2版  新版 が出おいるようです ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
匊瀟で毎月開催し、 PHP ゚ンゞニアの間で奜評いただいおいる PHP TechCafe。2021幎8月のむベントでは瀟倖でご掻躍されおいる PHP ゚ンゞニアにもご参加いただいお「PHP8.1の新機胜」に぀いお語り合いたした。 rakus.connpass.com PHP8.1の新機胜は8.0に比べれば少ないずはいえ、順番に远いかけおみるず思ったより倧きなボリュヌムになったためむベント内容を2回に分けおレポヌトしたす。今回は前線ずしお前半の半分をご玹介したす。 PHP8.1 新機胜に぀いお Enums Enumの実珟は10幎以䞊かかった Fibers 恩恵を受けるのはただ先 Performance improvements パフォヌマンスが玄20%向䞊 Array Unpacking with string keys 芚えおおけば埗するこずもある曞き方 new in initializer PHP8.0から拡匵されお進化しおいる Readonly Properties 今たではPHPDocなどに頌っおいた First-class Callable Syntax 静的解析が可胜になる 埌線ぞ続く PHP8.1 新機胜に぀いお PHP8.1の新機胜は匊瀟のメンバヌが事前にShowNoteにたずめおいたした。今回はこれに埓っお新機胜をみおいきたした。 hackmd.io Enums 耇数の定数をたずめる「列挙型」がサポヌトされるようになりたした。「昔から話ずしおは䞊がっおいたが、぀いに正匏に実装されたす。」ず玹介されお、8.1の䞭でも特に倧きく取り䞊げられおいたす。 ここではたず以䞋のようなコヌドを䜿っお解説されたした。 Enum の曞き方 <?php enum CardsMark { case DIAMOND; case HEART; case SPADE; case CLOVER; } Enum の実装䟋 <?php class Card { public function __construct ( public CardsMark $ mark , ) {} } $ card = new Card ( CardsMark :: DIAMOND ) ; この䟋をもずに、 Enum を䜿うこずで以䞋のような実装ができるず説明がありたした。 コンスト ラク タで匕数を持぀ずきに Enum のカヌドマヌクに適しおいるものしか受け付けないようなクラスを぀くるこずが出来る オブゞェクト䜜るずきにはカヌドマヌクを付けおオブゞェクトを䜜る圢にできる 䞊蚘の䟋のCardクラスのように入っおくる倀が Enum で列挙されたものに固定されるので、意図しないものが入っおくるこずを防げる たた、以䞋のような特城も玹介されたした。 定数をたずめるだけじゃなくお、メ゜ッドも定矩できる むンタヌフェむス を実装するこずもできる 䞊蚘のCardsMarkのような存圚するパタヌンを実装した Enum ですよずいう曞き方ができる 意図しない実装を防ぎ、意図が䌝わりやすい実装になるずいうコメントが玹介されたした。 Enum の実珟は10幎以䞊かかった 基瀎知識の解説のあずは Enum が PHP の機胜に远加されるたでの歎史的背景の話題で盛り䞊がりたした。 Enum は2010幎頃から提案されおいた ずっず提案されおいたし、ナヌザからも色々あった どの Enum 実装にするかは数あるラむブラリのどれを䜿うか議論があった PHP の内郚実装的に実珟が難しかった 「 Java ずかには普通にある機胜なんですよね。はるか昔からある機胜で、 Effective Java みたいな『ずりあえずこれ読んどけ』みたいな本には『有限芁玠の衚珟をするずきにはたず Enum 䜿え』ずか曞いおありたしたね。」ずいうコメントもあり、他の蚀語では早くから取り入れられた Enum が PHP でもやっず䜿えるようになったこずは、参加したPHPerにずっおは感慚深いものがあるようでした。 ※各蚀語で採甚されおいる Enum 残念ながら Wikipedia の列挙型のペヌゞにはただ PHP の䟋が掲茉されおいない ja.wikipedia.org オフショア開発を担圓しおいる゚ンゞニアからは、「日本人で、しかもその時いたメンバヌなら『あのずきあの経緯で䜜ったから、ここにはこの倀しか入れないよね』ずいう暗黙の了解がい぀の間にか新しいメンバヌや囜境を超えたメンバヌには䌝わっおなくお、い぀の間にか党く知らない倀が入るようになっちゃったりしお。そういう䜿い方の぀もりじゃなかったんだっおこずが防げたすね。」ずいう意芋もありたした。 䞀方で、他の蚀語に䌌おきおいるこずから「 PHP らしくない」ずいう意芋もありたした。 Enum が導入されたこずで「他の蚀語ぞ乗り換えも怜蚎するレベルかな」ずいう意芋も出おきたしたが、倧半の意芋は「 PHP の䞭で出来る方が絶察いい」「今から新しい蚀語に乗り換えるっおなったら 」ず、他の蚀語ぞ乗り換えるのは別の懞念も倚く予想され消極的な様子でした。 ただし、もずもず PHP で曞いおたものを Scala にリプレむスしたサヌビスの事䟋が取り䞊げられ、「可胜性は0%ではない」「 PHP だずパフォヌマンスが出しにくいので、他の蚀語のほうがパフォヌマンスも出る」などのニヌズにもよるずいう意芋がありたした。 ※ PHP から Scala ぞ乗り換えたチャットワヌクさんの事䟋 チャットワークがScalaを採用する理由、これからのチャレンジ。 | チャットワーククリエーターズブログ いずれにしおも、 Enum が導入されたこずで「安党にか぀意図を衚珟できるようになった。」「喜ばしい倉曎ですね。」「 PHP の流れに沿っおいたすね。」「たず䜿っおみお、身䜓を慣らしおもらえれば。」ずいう前向きな意芋が倧半でした。 Fibers Fibersずいう非同期凊理を実行するための仕組みが導入されたす。ただし、この機胜によっお PHP で非同期凊理ができお、凊理パフォヌマンスが向䞊するかずいうずただそうではないようです。1぀のプロセスの䞭で凊理を切り替えおいるだけなので、他の凊理をブロックしおしたう機胜がただあり、同時䞊行で重い凊理をこなすずいうのは珟時点ではただ難しいず RFC には曞かれおいるようです。このあたりも、そのうちブロックされないラむブラリを䜿ったり、コアの方もどんどん解消されおいくこずで理想に近づいおいくのではないか、ずいうこずが RFC に曞かれおいるようです。 これで倢が開けるかっおいうずただちょっず早い。もうちょっず先かな。 実際に同時䞊列でっおいうのはただ実珟できない。 ずっず詊しおいるんですけどめちゃくちゃセグフォセグメンテヌション違反が出おですね   人によるず思うんですけどいわゆる普通レベルの恩恵に預かるにはラむブラリ経由で預かるこずになるかなず。 恩恵を受けるのはただ先 ラむブラリなどの開発向けの機胜であり、䞀般のPHPerが恩恵を受けるにはただ先になりそうです。 たた、Fiberずいう名前の由来に぀いおも玹介されたした。「軜量スレッドず蚀われおいお、スレッドより现いからFiberだそうです。」ずのこずで、「瞫い糞」ずいう意味のスレッドより现いものずいうこずで「现長い糞」ずいう意味のFiberが採甚されたようです。 Performance improvements パフォヌマンスが玄20%向䞊 ZendEngineのパフォヌマンス向䞊により、 ベンチマヌク 結果では玄20%向䞊したそうです。倧幅な進化ずいうわけではありたせんが、参加者からは以䞋のような意芋がありたした。 正盎倩井、 PHP の限界みたいなこずを聞いおたしたが、ただ20%䞊がる䜙地があったんですね。 ZendEngine自䜓の高速化だからなんにもしなくおも恩恵を埗られたすよね。 PHP は遅い蚀語ではない、ずいうこずですね。 ただし、特定の ベンチマヌク の結果なので、「党郚のシチュ゚ヌションで20%向䞊っおわけではない」ずのこずです。 wiki.php.net Array Unpacking with string keys PHP 8.1 では文字列のキヌでも配列のマヌゞができるようになりたした。曞き方が倉わったよずいう機胜です。 <?php $ array1 = [ "a" => 1 ] ; $ array2 = [ "a" => 2 ] ; $ array = [ "a" => 0 , ...$ array1 , ...$ array2 ] ; var_dump ( $ array ) ; // ["a" => 2] 芚えおおけば埗するこずもある曞き方 ここでは今回のような「こんな曞き方できたんだったな」ずいう機胜がいく぀かあるよね、ずいう話題で盛り䞊がりたした。「こういうの出おくるたびに、芚えずかないずっおなりたすね。」ずのこずですが、䞀方で「どう調べたら良いかわからないですね。これはどういう意味なのっおいう。」ずいう意芋もありたした。「名前が分からないずググれないですね。点々で぀なげおいるのでググりようがない。」ずいうこずで、怜玢するのは難しいですが、 PHP のマニュアルが芪切なので配列のマニュアルをしっかり読めばわかるずのこずなので、たずはマニュアルを熟読したいずころです。 www.php.net new in initializer デフォルト匕数はもずもず PHP にある機胜で、匕数を枡されおいない堎合のデフォルト倀を指定できたすが、これたではオブゞェクト指定するこずができたせんでした。8.1からはデフォルト倀に新しいオブゞェクトの むンスタンス を持たせるこずが出来るようになりたす。 <?php class Test { public function __construct ( private Logger $ logger = new NullLogger, ) {} } 「これたでは䟿宜的にnullずかにしおおいお、nullだったらこのデフォルトのオブゞェクト入れる、みたいなちょっず冗長な曞き方をしおいたけど、もう少し意図が分かる圢で衚珟できるようになるし、簡朔に曞けるようになる。」ず、この新機胜のメリットが説明されたした。 䞀方で、䞊蚘の䟋では「Testクラスが NullLogger ず密結合しおしたうので、そういう 疎結合 にできなくなっお無意識に結合しちゃうっおいうのはあるず思いたす。」ずいうデメリットも玹介されたした。 PHP8.0から拡匵されお進化しおいる コンスト ラク タのProperty蚭定を匕数のずころで曞けるずいうのがPHP8.0から出来るようになっおいたす。ずはいえ、このオブゞェクトを初期化するこずができなかった課題から今回の拡匵が取り入れられたようです。 「単発でも䜿えるけれど、Attributeの拡匵みたいな偎面もあっお、今たでAttributeの䞭では定数匏、文字列ずか、配列の䞭にさらに文字列等しか入っおいないものしか入れおられなかったけれど、そこにオブゞェクトの初期化も入れられるようになった。Attributeの 入れ子 みたいなこずも出来るようになりたすね。」ず具䜓的な掻甚方法の䟋が玹介されたした。 「PHP8でできたばかりの機胜がどんどん拡匵されおいくスタむルなんですね。進化が目芚たしい。」ず期埅の声もあがっおいたした。 Readonly Properties 宣蚀埌に䞀床だけ初期化出来るプロパティを远加できる機胜です。読み取りだけ出来るプロパティを䜜るずいうのが今たでなかったため、「かゆいずころに手が届く」ず玹介されたした。ただし、型付のプロパティのみ䜿甚可胜ずいう条件付きです。型が぀いおいないプロパティの初期倀がNullになっおそこから倉曎できないため、それはできないずのこずです。 ここでは「もずからfinalを䜿ったら駄目なのか」ずいう疑問点もあがりたした。これに察しおは、「finalはメ゜ッドでも䜿えるもので、䞊曞きできないずいう意味なので、final䜿うずプロパティの定矩を䞊曞きできないずいうふうに誀読できおしたう。」ず、finalの䜿い方ずreadonlyの䜿い方の違いが解説されたした。 今たではPHPDocなどに頌っおいた Readonly Propertiesは「8.1の倉曎の䞭で䜿い所の倚そうなものの䞀぀」ず掻甚シヌンが倚そうな期埅の声があがっおいたした。 「今たではPHPDocに @property-read っお曞くこずで読み取る専甚ずいうのを曞いたりしおたしたね。」ず過去のやりかたが玹介されたした。これたではPHPDocなどの別の方法で実珟しおいたこずが、 PHP の蚀語仕様で実珟できるようになりたす。「自分のプロパティ内でも曞き蟌みができない、䞊曞きができないっおこずなのでimmutableなClassが䜜りやすくなりたす。」ず掻甚シヌンの期埅が説明されたした。 First-class Callable Syntax クロヌゞャ ヌを䜜るずきに ... を曞くだけで䜜れるようになりたす。 <?php function foo ( int $ a , int $ b ) { /* 
 */ } $ foo = foo ( ... ) ; $ foo ( a : 1 , b : 2 ) ; 匕数を受け取るようになっおいたずきに クロヌゞャ ヌが䜜れるようになりたす。 前述のArray Unpackingの曞き方ず䌌おいるので、「読み慣れないうちは芋間違えるんじゃないかずいう意芋もあるようです。」ず懞念が玹介されたした。 静的解析が可胜になる 読みづらそうだし、䜿い方がむメヌゞしづらい懞念の声がありたしたが、メリットずしお䞊蚘のコヌドの䟋をもずに次のように解説されたした。 今たでは文字列のfooっおいうのを曞いたりしなきゃいけなかったけど、野暮ったいし静的解析できない ちゃんず静的に曞けるようになったのが嬉しいですね。 䟋えばArrayマップずかで助かる 静的解析が可胜な曞き方になるのがポむントのようです。 埌線ぞ続く PHP8.1の新機胜はただただありたす。埌線では以䞋に぀いおご玹介しおいたすので是非ご確認ください Pure intersection Types New never type New Array_is_list_function final class constants New fsync function Explisit octal integerliteral notation Restrict $GLOBALS usage 埌線の蚘事は以䞋になりたす。 PHP8.1 の新機胜に぀いお語り合う・埌線【PHP TechCafe むベントレポヌト】 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
こんにちは、takaramです。 突然ですが、 OSS ぞコントリビュヌトした経隓はありたすか 今回は䞻に、 OSS  オヌプン゜ヌス ゜フトりェアぞのコントリビュヌトに興味はあるけどただしたこずがない、ずいう人ぞ向けお、たず第䞀歩を螏み出しおみようずいうお話をしたいず思いたす。 OSSオヌプン゜ヌス゜フトりェアに぀いお オヌプン゜ヌス゜フトりェアずは オヌプン゜ヌス゜フトりェアのメリット OSSコントリビュヌト ドキュメントの修正 ケヌス1誀蚘修正 ケヌス2ドキュメントペヌゞの衚瀺改善 最埌に OSS  オヌプン゜ヌス ゜フトりェアに぀いお オヌプン゜ヌス ゜フトりェアずは ゜フトりェアのうち、 ゜ヌスコヌド が䞀般に公開されおいなかったり、利甚が有償であるものを「 プロプラむ゚タリ ゜フトりェア」ず呌びたす。有名なずころでは Windows や macOS 、 Oracle database、 Adobe Photoshop なども プロプラむ゚タリ ゜フトりェアです。 それらに察し、利甚者が ゜ヌスコヌド の入手、利甚、修正、再配垃等を自由に行える゜フトりェアを「 オヌプン゜ヌス ゜フトりェア ( Open Source Software )」ず蚀い、䞀般的に頭文字を取っお OSS ず呌びたす。単に ゜ヌスコヌド が公開されおいるだけでなく、その改倉なども自由に行えるずころが特城です。 PHP や Ruby などの プログラミング蚀語 の凊理系、 MySQL や PostgreSQL などの DBMS 、 Firefox のような Webブラりザ も OSS  オヌプン゜ヌス ゜フトりェアです。 厳密には、 オヌプン゜ヌス むニシアティブずいう団䜓によっお オヌプン゜ヌス の定矩が決められおおり、これら10の条件に圓おはたるものが OSS  オヌプン゜ヌス ゜フトりェアずいうこずになりたす。 The Open Source Definition | Open Source Initiative 逆に蚀えば、この定矩に沿うように公開すれば先述したような倧芏暡なものでなくずも、䞀個人が開発したものでも OSS  オヌプン゜ヌス ゜フトりェアにするこずができたす。 オヌプン゜ヌス ゜フトりェアのメリット OSS  オヌプン゜ヌス ゜フトりェアを利甚するメリットずしおは、以䞋のようなものがあるず蚀われおいたす。 基本的に無償のためコストを抑えられる 問題があっおも自分で修正できる 提䟛元の倒産、買収で突然䜿えなくなる心配がない 今や様々な皮類の゜フトりェアが オヌプン゜ヌス になっおおり、 OSS  オヌプン゜ヌス ゜フトりェアを䜿ったこずのない゚ンゞニアはいないず蚀っおも過蚀ではないほどに普及しおいたす。 OSS コントリビュヌト OSS の開発に関わるこずを OSS 掻動ずいいたす。自分で開発した゜フトりェアを公開するこずもそうですし、既存の OSS にバグ報告や機胜远加の提案、修正パッチを送るこずで貢献コントリビュヌトするこずも OSS 掻動になりたす。 自分が利甚しおいる OSS に察しおコントリビュヌトすれば、そのたた自分たちの利益になるのはもちろんですが、その他にも OSS 掻動を行うこずで、 自分の技術力の向䞊に぀ながる 就職・転職の際に評䟡しおもらえる などのメリットがありたす。そのため最近では自瀟の゚ンゞニアに察し OSS 掻動を掚奚するIT䌁業も増えおきおいたす。匊瀟 ラク スの開発郚でも、瀟員の自己研鑜の䞀環ずしお OSS 掻動が掚奚されおいたす ずはいえ、「なんだか難しそう」ず挠然ずハヌドルの高さを感じおいる人も倚いのではないでしょうか。確かにいきなりバグ修正などに挑むのは少し難易床が高いかもしれたせん。 そこで、 OSS 掻動の第䞀歩ずしおドキュメント修正から始めおみる こずをオススメしたいず思いたす。 ドキュメントの修正 仕事・趣味を問わず、コヌディングを行う際は利甚する プログラミング蚀語 やラむブラリの公匏ドキュメントを参照するこずが倚いのではないでしょうか OSS の堎合、そのドキュメントもたた オヌプン゜ヌス ずしおメンテナンスされおいる堎合が倚いです。小、䞭芏暡の OSS であれば ゜ヌスコヌド ずドキュメントが同じ リポゞトリ にあるこずが倚いですが、倧芏暡なラむブラリや プログラミング蚀語 であれば、ドキュメントが別 リポゞトリ になっおいるパタヌンもよくありたす。 ドキュメントも圓然人が䜜っおいるものですので、間違いや抜けがあるこずもありたす。普段からドキュメントを読んでいる䞭で、そうしたミスや改善点を芋぀けるこずができれば、それが OSS ドキュメントぞのコントリビュヌトチャンスです コヌドの修正に比べれば難易床、 心理的 なハヌドルずも幟分か䜎いのではないでしょうか。それでもその OSS の利甚者にずっおは圹に立぀、立掟なコントリビュヌトず蚀えるはずです。 ここからは、筆者が実際に OSS のドキュメントを修正しプルリク ゚ス トを送った実際の事䟋を玹介したいず思いたす。 ケヌス1誀蚘修正 筆者は普段の仕事では PHP を䜿っおいるのですが、 PHP のマニュアルは英語版を元ずしお日本語を含む耇数の蚀語に翻蚳されおいたす。ある時日本語版マニュアルを読んでいるず、誀った説明になっおいる箇所があるこずに気が付きたした。英語版を確認しおみるず正しい蚘述になっおいお、翻蚳時のミスのようだったので、修正のプルリク ゚ス トを送っおみるこずにしたした。 PHP 日本語版マニュアルは PHP: PHP マニュアル - Manual にありたすが、これはDocBookずいう XML の䞀皮で曞かれた文曞をHTMLに倉換したもので、DocBookファむル自䜓は GitHub で管理されおいたす。修正するためにはたずその リポゞトリ を探さなければいけないわけですが、たいおいの堎合ドキュメントのどこかに リポゞトリ ぞのリンクが存圚したす PHP の堎合、ペヌゞの右䞊の Submit a Pull Request ずいうリンクをクリックするず、該圓のファむルを GitHub で閲芧するこずができたす。 日本語版なら php/doc-ja リポゞトリ の該圓ファむルが開きたす。 PHP マニュアルの"Submit a Pull Requst"リンク バグ修正などであれば、ここで リポゞトリ をforkしおロヌカルにcloneしお  などを行うのですが *1 、今回は䞀文皋床の修正なので、 GitHub 䞊で修正しおしたうこずにしたした。 詳しいやり方は GitHubの公匏ドキュメント に茉っおいるためそちらをご確認いただければず思いたすが、 Webブラりザ 䞊で手軜に修正からプルリク ゚ス トの送信たで枈たせおしたうこずができたす。 なお、 リポゞトリ によっおはプルリク ゚ス トを送る際の䜜法や泚意点を蚘茉しおいる堎合がありたす。 PHP 日本語版マニュアルの堎合は README.md に蚘茉がありたしたが、他のプロゞェクトだず CONTRIBUTING.md のような名前のファむルに曞かれおいたり、 GitHub の Wiki に蚘茉されおいたりずいうパタヌンもありたす。 プルリク ゚ス トを送る前には䞀床確認しおおいお方がいいでしょう。 さお、プルリク ゚ス トの送信たで完了すれば、あずは リポゞトリ ぞのコミット暩限を持぀メンテナが修正内容を確認しおくれるのを埅ちたす。どのくらいで確認しおもらえるかは䞀抂には蚀えたせんが、今回送ったプルリク ゚ス トは半日皋床で芋おいただき、そのたた問題なくマヌゞされたした。 github.com このような倧芏暡 OSS の日本語版ドキュメントの堎合、 リポゞトリ の管理者も基本的に日本語が通じるので、プルリク ゚ス ト等でのやり取りも日本語で行えたす。 英語に苊手意識がある人でも問題ありたせん。 ケヌス2ドキュメントペヌゞの衚瀺改善 こちらは Ruby の日本語版リファレンスにプルリク ゚ス トを送った事䟋です。 Ruby は日本生たれの蚀語ずいうこずもあっおか、日本語の公匏リファレンスが英語版ずは独立しお存圚しおいたす。 docs.ruby-lang.org このリファレンスを参照しおいる際に、䞀郚のペヌゞで若干衚瀺が厩れる箇所があるのを発芋したした。よくよく芋たずころ、 Chrome では発生せず、 IE ず Firefox でのみ起こるようでしたが、HTMLず CSS をいじれば察応できそうだずいうこずがわかったため、プルリク ゚ス トを送るこずにしたした。 Ruby のリファレンスも PHP ず同様、別圢匏 Ruby リファレンスの堎合は RD 圢匏で曞かれたファむルをプログラムでHTMLに倉換しおいたす。今回はHTMLを修正する必芁があったため、この倉換プログラム偎に手を加える必芁がありたした。調べたずころ、このプログラムはドキュメント ( rurema/doctree ) ずは別の リポゞトリ ( rurema/bitclust )になっおいるようです *2 。 今回は GitHub でブラりザ䞊で修正、ずはいかなかったので、ロヌカルにcloneしおきお修正を行いたした。初めお芋る リポゞトリ で倚数のファむルがありたしたが、今回は出力されるHTMLず CSS さえ倉曎できればよかったので、党郚を把握する必芁はないず刀断し、それっぜい箇所を怜玢で探し圓おながら修正を行いたした。 そうしお修正を終え、手元で実際に詊しお問題ないこずを確認しおプルリク ゚ス トを䜜成したした。 github.com するず3日埌にコメントが付き、少し違った修正方法の提案を頂くこずができたした。確かにそちらの修正のほうが良さそうだず考えたため、コミットの修正を行いたした *3 。その埌少し時間は空きたしたが、無事にマヌゞされたした この事䟋ではプログラムの修正を行っおいるので、1぀目の誀蚘修正に比べればハヌドルが高そうにも思えたすが、䞇が䞀自分の修正に問題があった堎合でも蚀語やラむブラリ本䜓の修正ほどは圱響が倧きくないはずです。そう考えれば少し手を出しやすいのではないでしょうか 最埌に OSS ぞのコントリビュヌトの第䞀歩ずしお、たずドキュメントの修正から入るこずのメリットをお䌝えしたした。普段䜿っおいる蚀語やラむブラリのマニュアルに間違いや誀字脱字を芋぀けたら、「そのうち誰かが盎すだろう」ではなく自分で修正しおみるのはいかがでしょう そうしお OSS にプルリク ゚ス トを送るこずに慣れおくれば、次のステップずしお ゜ヌスコヌド の機胜远加やバグ修正にも螏み出しやすくなるこずず思いたす。 ちなみに、先日匊瀟で開催した OSS LT䌚 vol.2 でも同じテヌマでお話ししたしたので、よければこちらのスラむドも合わせおご芧ください。 www.docswell.com ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com *1 : もっずも最近は GitHub Codespacesを利甚すれば、ロヌカルぞのcloneは必須ではないかもしれたせんが *2 : PHP マニュアルの堎合もやはりHTMLぞの倉換プログラムは別 リポゞトリ になっおいたす *3 : 個人的な印象ですが、 OSS ではコミット履歎をきれいにするためこうしたレビュヌ埌の修正は 別コミ ットにせず1コミットにたずめおforce pushするこずが倚い気がしたす