TECH PLAY

株匏䌚瀟ラクス

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

å…š953ä»¶

こんにちは。むンフラ゚ンゞニアをしおいたすknmriiです。 今回は bash の シェルスクリプト に぀いお、基本的な曞き方やよく䜿うコマンドなどを玹介しおいきたす。 bash でのプログラミングを孊び始めた方や、むンフラ゚ンゞニアになりたおの方のご参考になりたしたら幞いです。 たた、普段は別の蚀語に觊れられおいる方に぀いおもサヌバサむドではこのような bash の スクリプト が動いおいるこずが倚いですので 参考たでに䞀読しおいただければず思いたす。 目次 目次 bash・シェルスクリプトずは bashを甚いたシェルスクリプトの曞き方 シバン シェバング(Shebang) コメント 倉数の定矩 倉数に倀を代入する 倉数にスペヌス等が入った文字列を代入する 倉数にコマンドの実行結果を代入する スクリプト実行時の匕数を倉数に代入する 配列の定矩 先頭の内容を参照する 任意の配列番号の内容の参照する 配列の内容を党お参照する for文 指定回数を繰り返したい堎合 配列の芁玠数だけ繰り返したい堎合 while文 䞀般的なwhile文 readコマンドを䜿甚したwhile文 if文 case文 終わりに bash ・ シェルスクリプト ずは そもそも bash シェルスクリプト ずは䜕ぞやずいう話からさせお頂きたす。 bash bash ずは、倚くの UNIXç³»OS で暙準的に甚いられるシェルプログラムの䞀぀。暙準の実行プログラムファむル名コマンド名は「 bash 」だが、「sh」が指定された堎合も起動するよう シンボリックリンク が眮かれるこずが倚い。 IT甚語蟞兞 e-words bash より匕甚 シェルスクリプト シェルスクリプト ずは、OS オペレヌティングシステム を操䜜するためのシェル䞊で実行できる簡易な プログラミング蚀語  スクリプト蚀語 。たた、そのような蚀語によっお曞かれた、耇数のOSコマンドや制埡文などを組み合わせた簡易なプログラム。䞀般的には UNIXç³»OS のシェルで実行できるものを指す。 IT甚語蟞兞 e-words シェルスクリプト より匕甚 調べおみたずころ䞊蚘のような解説がありたしたが、入門者にずっおはかなり難しく感じるず思いたすので簡単に蚀い換えおみるずこのようになりたす。 bash → Unix ç³»( Linux 含む)のOSでナヌザがコマンドを入力し、それに応じおシステムが凊理をしたり応答を返すための仲介をするプログラム(シェル)の䞀皮。 シェルスクリプト → コマンドを組み合わせた簡易的な プログラミング蚀語 。 bash を甚いた シェルスクリプト の曞き方 ここからは実際の bash を甚いた シェルスクリプト の曞き方を玹介したす。 シバン シェバング( Shebang ) シェルスクリプト の1行目によく蚘茉されおいる以䞋のようなものをシバン シェバング( Shebang )ず呌びたす。 実行する シェルスクリプト の むンタプリタ を指定しおいたす。 シバンを以䞋のように蚘茉するこずで、 シェルスクリプト が bash を䜿甚しお実行されるようになりたす。 ぀い぀い忘れがちな1行かもしれたせんが、 bash にしかない機胜を䜿甚したい堎合に、この蚘茉がないず意図したように動かない可胜性がありたす。 bash を甚いた シェルスクリプト を䜜成する際には必ず曞くようにしたしょう。 #!/bin/bash たた、蚘茉するパスを #!/bin/sh ずしおも倧抵の堎合 /bin/sh は /bin/bash の シンボリックリンク ずなっおいるため、動䜜はしたすが䞀郚挙動が倉化するようです。 #!/bin/sh 参考「分かりそう」で「分からない」でも「分かった」気になれるIT甚語蟞兞 /bin/sh コメント bash の スクリプト 内にコメントを残したい堎合には、行の先頭に # を付けたしょう。 〇 スクリプト #!/bin/bash # echo "bashでこの行はコメントです" echo " bashでこの行はコメントではありたせん " 〇実行結果 bashでこの行はコメントではありたせん 倉数の定矩 bash での倉数は 倉数名 ず 倀 を  で぀なげるこずで定矩するこずができたす。 䞀般的には、倉数ず定矩する際に初期倀の代入をするこずが倚いです。 この際に、 java でいう int や String のような型を指定する必芁はありたせん。 ただし、基本的に bash では倉数に代入された倀の党おが文字列ずしお扱われたす。 たた、  の前埌にスペヌスを入れるず゚ラヌずなりたすのでご泚意ください。 倉数の内容は echo $倉数 ずするこずで出力するこずができたす。 倉数に倀を代入する bash では倉数ず倀を  で接続するだけで代入が可胜です。 〇 スクリプト #!/bin/bash NUM = 8 MESSAGE =Hello_bash echo $NUM echo $MESSAGE 〇実行結果 8 Hello_bash 倉数にスペヌス等が入った文字列を代入する bash では、ダブルクオヌテヌションで倀を囲むずスペヌスが入った文字列も倉数に代入するこずが可胜です。 〇 スクリプト #!/bin/bash MESSAGE = " Hello bash " 〇実行結果 Hello bash <泚意点> スペヌスが入った文字列をダブルクオヌテヌションで囲たずに代入するず、 bash のルヌル的にスペヌス以降の文字列が別コマンドずしお認識されおしたいたす。 倉数にコマンドの実行結果を代入する bash におコマンドの実行結果を倉数に代入したい堎面が非垞に倚いです。 そのような堎合は、バッククオヌトでコマンドを囲みたす。 #!/bin/bash HOSTNAME = `hostname` echo $HOSTNAME testhost001 スクリプト 実行時の匕数を倉数に代入する bash の スクリプト を実行する際、匕数を枡すこずができたす。 䞀般的な匕数は、䞀床倉数に栌玍しお スクリプト 内で䜿甚するこずが倚いです。 たた、匕数は ${1} ${2} のように、枡した順番を指定しお呌び出すこずも可胜です。 〇 スクリプト #!/bin/bash NUM = ${1} STRING = ${2} echo " 匕数1は ${NUM} です " echo " 匕数2は ${STRING} です " 〇実行結果 $ sh test.sh 1 bash 匕数1は1です 匕数2はbashです 配列の定矩 bash にお配列の定矩をする堎合は、倉数ず同様に 配列名 ず 配列 を  で぀なげたす。 この際、配列に関しおは (A B C) のようにかっこで囲み倀ごずにスペヌスを入れたす。 #!/bin/bash ARRAY = ( 0 1 2 3 4 5 ) bash で配列の䞭身を参照するには、以䞋のようにしたす。 先頭の内容を参照する 〇 スクリプト #!/bin/bash ARRAY = ( 0 1 2 3 4 5 ) echo $ARRAY 〇実行結果 0 任意の配列番号の内容の参照する 〇 スクリプト #!/bin/bash ARRAY = ( 0 1 2 3 4 5 ) echo " ${ARRAY[ 1 ]} " 〇実行結果 1 配列の内容を党お参照する 〇 スクリプト #!/bin/bash ARRAY = ( 0 1 2 3 4 5 ) echo " ${ARRAY[ @ ]} " 〇実行結果 0 1 2 3 4 5 for文 指定回数を繰り返したい堎合 bash でのfor文は以䞋のようにしたす。 seq コマンドを䜿甚するこずで指定の回数を繰り返すこずが可胜です。 〇 スクリプト #!/bin/bash for i in `seq 0 5 ` do echo $i done 〇実行結果 0 1 2 3 4 5 配列の芁 玠数 だけ繰り返したい堎合 配列の䞭身を順番に取り出したいケヌスはかなり倚いず思いたす。 そのような堎合、 bash では以䞋のようにするずfor文で党お取り出せたす。 〇 スクリプト #!/bin/bash ARRAY = ( January February March April May June July August September October November December ) for i in ${ARRAY[ @ ]} do echo $i done 〇実行結果 January February March April May June July August September October November December while文 䞀般的なwhile文 bash での䞀般的なwhile文は以䞋のように蚘茉できたす。 [] で囲たれおいる郚分に぀いおは、testコマンドが実行されおいるのですが、testコマンドに぀いおはif文の項目で解説しようず思いたす。 〇 スクリプト #!/bin/bash count = 0 while [ $count -lt 5 ] do count = $(( ++count )) echo $count done 〇実行結果 test.txt 1 2 3 4 5 readコマンドを䜿甚したwhile文 テキストファむルの党おの行に察しお凊理をしたいこずが床々ありたす。 そのような堎合に䜿甚するのが、readコマンドを䜿甚したwhile文です。 〇サンプルファむル January February March April May June July August September October November December 〇 スクリプト #!/bin/bash while read line do echo $line done < test .txt 〇実行結果 January February March April May June July August September October November December if文 bash で特定の条件で凊理を分岐させたい堎合には、if文を䜿甚したす。 bash でのif文の倚くはtestコマンドを䜿甚したす。 たた、testコマンドを䜿甚したif文はこのように蚘茉したす。 if [ 条件 1 ]; then 凊理 1 ## 条件1が真であれば凊理1が実行される elif [ 条件 2 ]; then 凊理 2 ## 条件を耇数䜿甚したい堎合は elif を䜿甚する ## 条件2が真であれば凊理2が実行される else 凊理 3 ## 条件1 2 がどちらでも真でなければ凊理3が実行される fi 䞊蚘のように [] を䜿甚しおその䞭に条件を蚘茉するのですが、その蚘茉方法は test コマンドに準じおいたす。 testコマンドにお䜿甚できるパラメヌタの䞀䟋ずしお、以䞋のようなものがありたす。 項目 䟋 説明 -e [ -e /tmp/testfile ] testfileが存圚しおいれば真 -f [ -e /tmp/testfile ] testfile存圚しおいお通垞ファむルであれば真 -d [ -d /tmp/testdir] testdirが存圚しおいお ディレクト リであれば真 -z [ -z 文字列 ] 文字列の長さが0であれば真 -n [ -n 文字列 ] 文字列の長さが0でなければ真 -eq [ 数倀1 -eq 数倀2 ] 数倀1ず数倀2が等しければ真(=) -ne [ 数倀1 -ne 数倀2 ] 数倀1ず数倀2が等しければ真(!=) -gt [ 数倀1 -gt 数倀2 ] 数倀1が数倀2より倧きければ真(>) -ge [ 数倀1 -ge 数倀2 ] 数倀1が数倀2以䞊であれば真(>=) -lt [ 数倀1 -lt 数倀2 ] 数倀1が数倀2より小さければ真(<) -le [ 数倀1 -le 数倀2 ] 数倀1が数倀2以䞋であれば真(<=) = [ 文字列1 = 文字列2 ] 文字列1ず文字列2が等しければ真 != [ 文字列1 != 文字列2 ] 文字列1ず文字列2が等しくなければ真 if文の䜿甚䟋ずしおのサンプルは以䞋です。 〇 スクリプト #!/bin/bash NUMS = ( 1 2 3 4 5 6 7 8 9 10 ) STRINGS = ( January February March April May June July August September October November December ) echo " ===========TEST1=========== " for num in ${NUMS[ @ ]} do if [ $num -gt 5 ]; then echo " $num は5より倧きいです。 " else echo " $num は5以䞋です。 " fi done echo " ===========TEST2=========== " for num in ${NUMS[ @ ]} do if [ $num -le 5 ]; then echo " $num は5以䞋です。 " else echo " $num は5より倧きいです。 " fi done echo " ===========TEST3=========== " for str in ${STRINGS[ @ ]} do if [ $str = "January" ];then echo " $str は1月です " touch /tmp/jaunary.txt else echo " $str は1月ではありたせん。 " fi done echo " =========================== " 〇実行結果 ===========TEST1=========== 1は5以䞋です。 2は5以䞋です。 3は5以䞋です。 4は5以䞋です。 5は5以䞋です。 6は5より倧きいです。 7は5より倧きいです。 8は5より倧きいです。 9は5より倧きいです。 10は5より倧きいです。 ===========TEST2=========== 1は5以䞋です。 2は5以䞋です。 3は5以䞋です。 4は5以䞋です。 5は5以䞋です。 6は5より倧きいです。 7は5より倧きいです。 8は5より倧きいです。 9は5より倧きいです。 10は5より倧きいです。 ===========TEST3=========== January は1月です February は1月ではありたせん。 March は1月ではありたせん。 April は1月ではありたせん。 May は1月ではありたせん。 June は1月ではありたせん。 July は1月ではありたせん。 August は1月ではありたせん。 September は1月ではありたせん。 October は1月ではありたせん。 November は1月ではありたせん。 December は1月ではありたせん。 =========================== case文 bash にお特定の条件で凊理を分岐させたい堎合には、if文ではなくcase文を䜿甚するこずもできたす。 条件分岐が倚い堎合はこちらの方が䟿利ですね。 case 倀 in 倀1 ) 凊理1 ;; 倀2 ) 凊理2 ;; 倀3 ) 凊理3 ;; * ) 凊理4 # 凊理13のどれずも䞀臎しなかった堎合は凊理4が実行される esac 䜿甚䟋ずしおは以䞋のような感じです。 〇 スクリプト #!/bin/bash STRINGS = ( January February March April May June July August September October November December ) for str in ${STRINGS[ @ ]} do case $str in January ) echo " $str は1月です " ;; February ) echo " $str は2月です " ;; March ) echo " $str は3月です " ;; * ) echo " $str は1月ではありたせん " esac done 〇実行結果 January は1月です February は2月です March は3月です April は1月ではありたせん May は1月ではありたせん June は1月ではありたせん July は1月ではありたせん August は1月ではありたせん September は1月ではありたせん October は1月ではありたせん November は1月ではありたせん December は1月ではありたせん 終わりに 今回は bash による シェルスクリプト の基本的な曞き方や、構文に぀いおを玹介したした。 ほかの蚀語を孊習しおから bash を䜿おうずしたり、始めおプログラミングに觊れる方にずっお戞惑うこずも倚いかず思いたすが、少しでもご参考になれば幞いです。   ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 https://rakus.hubspotpagebuilder.com/visit_engineer/ rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
はじめに こんにちは。フロント゚ンドチヌム新卒2幎目のhy094です。 Reactでよく䜿甚するJSX。 䜿っおみるず䟿利なのですが、最初は「 JavaScript 内にHTML」ず混乱の原因になっおいるず思いたす。 たた、その構文から違和感や気持ち悪さを感じる方もいるず聞きたす。 そこで、今回はReactで䜿甚するJSXに぀いおたずめたす。 少しでも混乱や違和感の解消ができたら幞いです。 目次 はじめに 目次 JSXずは JSXの蚘法 JavaScript匏を埋め蟌む コメントアりト タグが空の堎合 フラグメント HTMLずの属性の差異 おわりに 参考文献 JSXずは 䞀蚀で衚すず「 JavaScript 内でHTMLっぜい衚珟をする Javascript の拡匵構文」です。 具䜓的には以䞋のような圢です。 const element = ( <h1 className= "greeting" > Hello, world! </h1> ); ※ React公匏サむト より匕甚 JavaScript の倉数宣蚀にHTMLタグが代入されおいるように芋え、違和感を感じる方もいるかもしれたせん。 䞊蚘の通り拡匵構文ですので䞊の匏は以䞋の匏に コンパむル されたす。 const element = React.createElement( 'h1' , { className: 'greeting' } , 'Hello, world!' ); ※ React公匏サむト より匕甚 ここたで芋お「もしやJSXなくおもReact曞けるのでは・・・」ず思った方、正解です。曞けたす。 ただ、 React.createElement で毎回曞くのは非垞に手間でコヌドも煩雑になるため、JSXを利甚するこずを個人的にはお勧めしたす。 それでもJSXは䜿いたくない・・ずいう方は 公匏サむト - JSX なしで React を䜿う を参照しおください。 JSXの蚘法 ここからは、JSXの蚘法に぀いおたずめたす。 JavaScript 匏を埋め蟌む JSX内に {} で囲むこずで JavaScript の匏を埋め蟌むこずができたす。 const fruit = 'りんご' ; const price = 100; const quantity = 5; const element = <h1> { fruit } を { quantity } 個買うず { price * quantity } 円です</h1>; ReactDOM.render( element, document .getElementById( 'root' ) ); もちろん関数も利甚可胜です。 function formatName(user) { return user.firstName + ' ' + user.lastName; } const user = { firstName: 'Harper' , lastName: 'Perez' } ; const element = ( <h1> Hello, { formatName(user) } ! </h1> ); ReactDOM.render( element, document .getElementById( 'root' ) ); ※ React公匏サむト より匕甚 コメントアりト JSX内ではHTML圢匏でのコメントは利甚できたせん。 代わりに、 JavaScript の匏を埋め蟌んだものず同じ {} 内に JavaScript の コメントアりト を蚘述したす。 const user = 'admin' ; const element = ( <div> { /* コメント */ } { /*  耇数行コメントA  耇数行コメントB */ } { //コメント user } </div> ); 最埌の䟋は改行しないず } も コメントアりト されおしたい、゚ラヌずなるので改行はお忘れなく。 タグが空の堎合 タグが空の堎合は /> で閉じたす。 䟋えば、HTMLで改行タグは <br> ですが、JSXでは <br /> にしないずNGです。 <div> こんにちは <br /> <img src= "example.gif" /> </div> フラグメント JSXは芪芁玠を1぀しか持぀こずができたせん。 䟋えば、以䞋のようなものぱラヌずなりたす。 const error = ( <div> hoge </div> <div> fuga </div>); 簡単な解決方法ずしお、党䜓をさらに芪芁玠で囲っおしたうずいうものがありたす。 const success = ( <div> <div> hoge </div> <div> fuga </div> </div>); ただ、この方法だず䞍芁なdivがDOMに远加されおしたいたす。 この問題は、フラグメント( React.Fragment )を利甚するこずで解決できたす。 const fragment = ( <React.Fragment> <div> hoge </div> <div> fuga </div> </React.Fragment>); React.Fragment だず少し長いので、短瞮蚘法も甚意されおいたす。 <> , </> です。 const shrotFragment = ( <> <div> hoge </div> <div> fuga </div> </>); 䞀芋空タグにしか芋えたせんが、 React.Fragment ず同等のフラグメントずしお認識されたす。 Reactで頻出する蚘法ですので、芚えおおいお損はないず思いたす。 HTMLずの属性の差異 JSXはあくたでも JavaScript なので、 HTMLの属性はキャメルケヌスで曞きたすし、 JavaScript の 予玄語 (classなど)は属性ずしお䜿えたせん。 以䞋は䞀䟋です。 <> { /* class属性 -> className */ } <div className= "hoge" > { /* for属性 -> htmlFor */ } <label htmlFor= "fuga" >Hello</label> { /* tabindex属性 -> tabIndex */ } <div tabIndex= "0" >World</div> </div> </> おわりに 今回はJSXに぀いおたずめたした。 JSXは React.createElement を芋やすく曞く蚘法です。 たた、 React.createElement に コンパむル されるので import React from "react"; が必芁になるわけです。 JSXはReactの土台なので、初孊者の内に抑えおおくず埌がスムヌズになるず思いたす。 参考文献のほか、玹介しおいるサむトは少なくないのでぜひ他にも調べおみおください。 それでは、ご芧いただきありがずうございたした 参考文献 https://ja.reactjs.org/docs/introducing-jsx.html https://ja.reactjs.org/docs/jsx-in-depth.html https://ja.reactjs.org/docs/fragments.html#short-syntax https://ja.reactjs.org/docs/faq-build.html#gatsby-focus-wrapper https://qiita.com/nabepon/items/87bb3b4f1e7bfa342489 https://www.to-r.net/media/react-tutorial04/ https://note.com/erukiti/n/n6f673021469e ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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です。 い぀も ラク スの゚ンゞニアブログをお読みいただき、たた゚ンゞニアむベントぞのご参加、ありがずうございたす。 今回は、匊瀟が䞻催しおいるむベントの䞭でも人気の高い「プロゞェクトマネゞメント Tips LT䌚」に぀いお、たずめさせおいただきたした はじめに むベント抂芁 発衚タむトル䞀芧 発衚の玹介 No1. SaaS開発ず受蚗開発におけるプロゞェクトマネゞメントの違い No4. プロゞェクトメンバヌのモチベヌション No6. メンバヌず䞀緒に進めるマネゞメントの孊び方ず䌝え方 圓日の様子 おわりに むベント抂芁 むベント内容 プロゞェクトマネゞメント をテヌマにしたLT䌚 開催日 2021/05/12(æ°Ž) 19:00-21:30 むベントペヌゞ rakus.connpass.com 匊瀟䞻催むベントでは、LTラむトニング トヌク 圢匏を採甚しおおりたす。 LTずは Lightning Talksラむトニング トヌク の略 "Lightning"は英語で"皲劻"ずいう意味 ぀たり 「短いプレれンテヌション」 発衚タむトル䞀芧 今回、LT䌚に参加された方々の発衚タむトルは以䞋の通りです。 No. 登壇者 タむトル 1 komik さん SaaS 開発ず受蚗開発におけるプロゞェクトマネゞメントの違い 2 Pep299 さん プレむングマネヌゞャヌ の葛藀 3 ヒグ さん 瀟䌚人2幎目の゚ンゞニアがPMになるずき 4 moriyama_jun さん プロゞェクトメンバヌのモチベヌション 5 面川泰明 さん 性栌蚺断ず䟡倀芳分析ではじめる1on1 6 Mazawa_Hajime さん メンバヌず䞀緒に進めるマネゞメントの孊び方ず䌝え方 7 癜柳隆叞 さん 「終わらせる」から考えるマネゞメント 8 Hiroki_Hachisuka さん あなたはPOPMPdMPjM 9 sakamoto-k さん アゞャむル なチヌムぞの道 はじめの䞀歩 10 ShoheiKun さん メンバヌに任せるこずに぀いお 11 Cat_Maru さん プロゞェクト管理倱敗点からの孊びTips仮 発衚の玹介 LT䌚には、匊瀟の開発組織からマネヌゞャヌ3名が登壇したした。 本蚘事では、その3名の発衚内容をご玹介したす。 No1. SaaS 開発ず受蚗開発におけるプロゞェクトマネゞメントの違い speakerdeck.com 珟堎での開発経隓が長い分技術力を背景にしたマネゞメントが埗意で、困難な状況䞋でもやりぬく達成志向性が匷い、 ラク ス開発マネヌゞャヌの発衚です。 SaaS 開発ず受蚗開発におけるプロゞェクトマネゞメントの違いを「品質・コスト・タむム」の芳点で分かりやすく解説いただきたした。 1本目の発衚でしたが、参加者からも共感の声が倚く、ずおも盛り䞊がっおおりたした。 No4. プロゞェクトメンバヌのモチベヌション speakerdeck.com 続きたしお、テレビCMでも目にする楜楜粟算から開発マネヌゞャヌの発衚です。 メンバヌのモチベヌションをマネゞメントするにあたり、1on1や定期的な面談の堎で「幞犏床」の点数ずその理由を問うずのこず。 参加者からも「これは良い問い」、「倧事なのは満点ずのギャップず理由」な どコメントが倚くよせられたした。 No6. メンバヌず䞀緒に進めるマネゞメントの孊び方ず䌝え方 speakerdeck.com 最埌は、 ラク スの゚ンゞニア リングマ ネヌゞャヌからの発衚です。 マネヌゞャヌずしお取り組んでいる工倫をご玹介したした。 共感 業務ではなく研修ずしおやっおみる時間を分ける 孊ぶ、真䌌る オレオレ経隓より有名曞籍のべスプラを玹介しおみる 自己達成感 教わる偎が話す、圓おはめるなど、アクティブラヌニングで詊す 発衚を聞かれた参加者からは、有名曞籍をたずめた以䞋蚘事に察し、関心が高たっおおりたした。 tech-blog.rakus.co.jp 圓日の様子 Togetterで、圓日の様子をたずめおおりたす。 雰囲気を芋たいずいう方は、以䞋をご確認ください。 togetter.com おわりに 本蚘事では、匊瀟開発マネゞャヌ達の発衚内容をご玹介させおいただきたした。 他の方の発衚資料を芋たいずいう方は、以䞋むベントペヌゞから、ご確認ください。 rakus.connpass.com プロゞェクトマネゞメント Tips LT䌚は、2021幎床䞭にvo3を開催する予定です。 もし、本蚘事をお読みいただき、興味関心が湧きたしたら是非次回むベントに参加登壇申し蟌みいただけたすず幞いです。 ラク スでは、毎週LT䌚や勉匷䌚のむベントを開催しおおりたす。 我々の取り組みが、皆さたにずっお新しい気づきや成長に぀ながる機䌚ずなっおいたすず嬉しい限りです。 今埌ずもよろしくお願いいたしたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
こんにちは、株匏䌚瀟 ラク スで先行技術怜蚌を行っおいる技術掚進課の @t_okkan です。 今回はFlutterの静的解析を玹介したす。 Flutterは Dart で実装しおいるため、静的解析も Dart の仕組みを利甚したす。 Dart は静的型付け蚀語ず動的型付け蚀語のどちらにも察応しおいるため、型チェックが比范的ゆるい プログラミング蚀語 です。 そのため、静的解析のルヌルを定めるこずで型チェックを厳密にしたり、コヌドのバグを未然に防ぐこずが必芁になりたす。 たた、 ゜ヌスコヌド に匷制的に統䞀されたコヌディングスタむルを適甚できたす。 Flutterの静的解析の仕組みからできるこずを玹介しおいたす。 Flutterの静的解析の構成芁玠 静的解析の導入 includeの蚭定 analyzerの蚭定 厳密な型チェックを有効にする 䞀郚のファむルを解析の察象から陀倖する 特定のルヌルをプロゞェクトで無効にする 解析のルヌルの重芁床を倉曎する linterの蚭定 ファむルや特定のコヌドを静的解析の察象から陀倖する 静的解析の実行 ゚ディタで静的解析を有効にする コマンドラむンで静的解析を実行する たずめ Flutterの静的解析の構成芁玠 Flutterの実装蚀語である Dart の静的解析はAnalyzerずLinterから構成されたす。 Analyzer ゜ヌスコヌド に Dartの蚀語仕様 で指定されおいる゚ラヌや譊告などの 朜圚的 なバグがないかを解析したす。 Linter ゜ヌスコヌド が Dartのスタむルガむドラむン や蚭定した他の ガむドラむン に準拠しおいるかを解析したす。 Flutterではこの Dart の静的解析の仕組みを利甚しお、 ゜ヌスコヌド の静的解析を行いたす。 静的解析の導入 Flutterのプロゞェクトに静的解析を導入するには、 analysis_optins.yaml ファむルを pubsepc.yaml ファむルず同じ ディレクト リに配眮したす。 ./ sample |- android |- ios |- lib | |- main.dart |- analysis_options.yaml ← ファむルを远加 |- pubspec.yaml Flutterの新芏プロゞェクトを䜜成した時に、プロゞェクトのルヌトに analysis_options.yaml ファむルを远加するこずをお勧めしたす。 analysis_options.yaml は以䞋のような実装になりたす。 include : package:pedantic/analysis_options.yaml analyzer : exclude : [ build/** ] strong-mode : implicit-casts : false linter : rules : - camel_case_types analysis_options.yaml では以䞋の蚭定が可胜です。 inculde 他の analysis_options.yaml ファむルを取り蟌むこずで、定矩されおいる静的解析のルヌルを取り蟌む。 analyzer Analyzerや静的解析党䜓のカスタマむズを蚭定する。 linter Linterのルヌルをカスタマむズを蚭定する。 それぞれの蚭定でできるこずを詳しく説明しおいきたす。 includeの蚭定 include にはすでに定矩枈みの倖郚の analysis_options.yaml ファむルをプロゞェクトに取り蟌むこずができたす。 これにより静的解析を手軜に導入するこずができたす。 たた、 analyzer や linter を独自で蚭定しお1から静的解析のルヌルを構築するこずも可胜ですが、Flutterの プラグむン ずしお定矩枈みのルヌルを適甚するこずができたす。 䞻な プラグむン には以䞋のようなものがありたす。 effective_ dart Dart を効率的に実装するために定めたルヌルである Effective Dart に準拠したLinterのルヌルを適甚できる。 pub.dev lint effective_dart プラグむン ず同様にEffective Dart に準拠したLinterのルヌルを適甚できる。 pub.dev pedantic Google が内郚で䜿甚しおいる静的解析のルヌルを取り蟌むこずができる。Flutter SDK を実装するプロゞェクトで利甚されおいるルヌル。Effective Dart よりもより厳密なルヌルが蚭定がされおいる。 pub.dev それぞれの プラグむン の リポゞトリ の analysis_options.yaml から、どのようなルヌルが蚭定されおいるのか確認できたす。 静的解析の プラグむン を導入する堎合は、 pubspec.yaml に プラグむン を远加し、 analysis_options.yaml の include に プラグむン で定矩されおいる analysis_options.yaml を蚭定したす。 䟋えば、 pedantic を導入する堎合は以䞋のようになりたす。 pubspec. yaml dev_dependencies : flutter_test : sdk : flutter # プラグむンを远加 pedantic : ^1.11.0 analysis_options. yaml # pedanticのanalysis_options.yamlを蚭定 include : package:pedantic/analysis_options.yaml analyzerの蚭定 analyzer では Dart の型システムのカスタマむズや、静的解析を適甚する範囲の蚭定などができたす。 厳密な型チェックを有効にする Dart は郚分的に動的片付け蚀語になるため、デフォルトでは暗黙的型倉換が有効であったり、比范的ゆるめの型チェックになりたす。 Dart のデフォルトの型チェックよりも厳密な型チェックが必芁な堎合は、 analyzer のオプションで strong-mode を指定するこずで有効にできたす。 strong-mode では以䞋のような蚭定が可胜です。 implicit-casts false にするこずで暗黙的型倉換の実装を犁止できたす。 implicit-dynamic false にするこずで動的な型宣蚀で䜿甚する dynamic 型の䜿甚を犁止できたす。 analysis_options.yaml は以䞋のように蚭定したす。 analyzer : strong-mode : implicit-casts : false implicit-dynamic : false コンパむル 時の型チェックが厳密になり、より堅牢なコヌドになるので、できるだけ厳密な型チェックは有効にするこずをおすすめしたす。 䞀郚のファむルを解析の察象から陀倖する Flutterの実装をしおいるず、immutableなクラスを自動生成する freezed パッケヌゞなどで自動生成されたファむルは、静的解析の察象から陀倖したい堎合がありたす。 たた、䞀郚のファむルを解析から陀倖したい堎合は、 analyzer のオプションの exclude に陀倖するファむルを蚭定できたす。 以䞋に analysis_options.yaml の蚭定の䞀䟋を茉せおおきたす。 analyzer : exclude : # ファむルを盎接指定 - lib/client.dart # フォルダ内の特定の拡匵子を指定 - lib/data/model/*.freezed.dart # フォルダ内の党おのファむルを指定 - test/_data/** 特定のルヌルをプロゞェクトで無効にする 前述した静的解析甚の プラグむン を導入した際に、特定のルヌルだけは無効にしたい堎合がありたす。 特定のルヌルをプロゞェクトで無効にするには、 analyzer のオプションの errors に蚭定し、 errors のオプションに無芖したいルヌル名、 ignore を蚭定するず、プロゞェクト党䜓で指定したルヌルを無効にできたす。 なお、AnalyzerずLinterのどちらのルヌルも無効にできたす。 参考ずしお、以䞋に analysis_options.yaml 蚭定の䞀䟋を茉せおおきたす。 analyzer : errors : # ルヌル名ignore # Analyzerの無効化TODO衚蚘を無芖する todo : ignore # Linterの無効化 avoid_empty_else : ignore 解析のルヌルの重芁床を倉曎する Flutterの静的解析には info 、 warning 、 error の3皮類の重芁床がありたす。 info ず warning 静的解析には倱敗しないが、譊告されるレベル error 違反しおいるず静的解析が倱敗するレベル Flutterの静的解析では、特定の解析ルヌルの重芁床をプロゞェクト党䜓で倉曎するこずができたす。 䟋えば、Linterルヌルはデフォルトで info レベルに蚭定されおいたすが、 warning や error レベルに匕き䞊げるこずが可胜です。 重芁床を倉曎するには analyzer の errors オプションに、倉曎したいルヌル名ず重芁床 info 、 warning 、 error を蚭定したす。 以䞋に、 analysis_options.yaml 蚭定の䞀䟋を茉せおおきたす。 analyzer : errors : # ルヌル名重芁床info、warning、error # Analyzerの倉曎returnの省略を譊告する missing_return : warning # Linterの倉曎 prefer_contains : error linterの蚭定 プラグむン である pedantic や effective_dart を導入するこずで、Linterを手軜に蚭定できたしたが、もちろん開発者が個別でLinterをカスタマむズするこずも可胜です。 カスタマむズする項目を linter の rules に蚭定したす。 Linterで蚭定できるルヌルの䞀芧は、以䞋で公開されおいたす。 dart-lang.github.io pedantic ず effective_dart 、Flutterでデフォルトで適甚されおいる蚭定はそれぞれマヌクされおおり、蚭定されおいるルヌルを䞊曞きしお無効にするこずもできたす。 䟋えば、ロヌカル倉数で 型掚論 を䜿甚するようにしたす。 omit_local_variable_types を無効にする堎合は、以䞋のように false を蚭定したす。 include : package:pedantic/analysis_options.yaml linter : rules : omit_local_variable_types : false ファむルや特定のコヌドを静的解析の察象から陀倖する analyzer の蚭定で、特定のファむルを静的解析の察象から陀倖するこずができたした。 それに加え、 ゜ヌスコヌド の特定の1行だけ特別に静的解析の察象から陀倖するこずができたす。 たた、ファむル内にそのファむルを静的解析の察象から陀倖する蚭定ができたす。 1行のコヌドで特定のルヌルを陀倖する 特定の1行のコヌドでルヌルを陀倖するにはコヌドの1行䞊に ignore: linterのルヌル を コメントアりト で远加したす。耇数のルヌルを陀倖する堎合はコンマ区切りで指定したす。 // ignore: linterのルヌル名 // 以䞋実装䟋 class Point { int x, y; // ignore: empty_constructor_bodies Point ( this .x, this .y) {} // 空のコンストラクタが譊告されない } ファむル内で特定のルヌルを陀倖する ファむル内で特定のルヌルが適甚されないように蚭定できたす。ファむルのどこかできればパッケヌゞのimportの盎䞋に ignore_for_file: linterのルヌル を コメントアりト で远加したす。耇数のルヌルを陀倖する堎合はコンマ区切りで指定したす。 // ignore_for_file: linterのルヌル名 // 以䞋実装䟋 // ignore_for_file: omit_local_variable_types, empty_constructor_bodies class Point { int x, y; Point ( this .x, this .y) {} // 空のコンストラクタが譊告されない } 静的解析の実行 静的解析を実行する方法には、゚ディタで実行する方法ず、 コマンドラむン で実行する方法がありたす。 静的解析の実行に぀いおは、Flutterの リポゞトリ の Wiki に詳しく蚘茉されおいたすので、合わせおご確認ください。 github.com ゚ディタで静的解析を有効にする Flutterの開発に察応しおいる゚ディタや IDE を䜿甚しおいる堎合、各環境のFlutterず Dart の拡匵 プラグむン をむンストヌルしおいればプロゞェクトの analysis_options.yaml を認識しお、ファむル保存時などおいお、自動で静的解析を実行したす。 各゚ディタのセットアップ方法は、以䞋に玹介されおいたす。 手順に沿っお拡匵 プラグむン をむンストヌルしおください。 flutter.dev コマンドラむン で静的解析を実行する コマンドラむン からでも静的解析を実行できたす。 プロゞェクトのルヌトで flutter analyze を実行したす。 $ flutter analyze Analyzing flutter_analyzer... info • Avoid types as parameter names • lib/main.dart:39:16 • avoid_types_as_parameter_names 1 issue found. (ran in 4.2s) たずめ Flutterの静的解析に぀いおたずめたした。 Lintルヌルなど蚭定倀が倚く、いきなり䞀぀䞀぀を自分で蚭定するのハヌドルが高いかず思いたす。 ですのでたずは、 pedantic や effective_dart などの プラグむン を導入するこずをお勧めしたす。 たた、別の方法ずしおはFlutterの リポゞトリ にある analysis_options.yaml ファむルをコピヌする方法もお勧めです。 あずは、 Effective Dart をしっかり読み、Flutterの実装を進めお気になるこずがあれば個別でルヌルを远加しおいくず良いかず思いたす。 そしお、ある皋床ルヌルが固たっおきたらテンプレヌト化し、耇数のプロゞェクトで䜿いたわせるようになるかず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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です。 Google スプレッドシヌト を皆様ご存じでしょうか 「あヌ、 Google 版 Excel かな」ず思う方もいるず思いたすが、実は Microsoft 瀟の Excel ず違いが倚くありたす。 今回は、初心者の方向けに Google スプレッドシヌト の䜿い方 や、ビゞネスシヌンで倚く利甚されおいる Microsoft 瀟の Excel ずの違い などをご玹介したす。 たた、このブログをご確認いただくこずで、 Google スプレッドシヌト の理解を深めおいただき、業務効率を䞊げおいきたしょう。 なお、 Excel 初心者の方向けに「 Excel゚クセル IF関数 䜿い方【たずめ】 」もございたすので、是非ご参考ください。 はじめに Google スプレッドシヌトずは Google スプレッドシヌトの䜿い方 Google スプレッドシヌトずExcelの違いず特城 Google スプレッドシヌトのむンストヌル有無 線集方法 保存方法 凊理スピヌド Google スプレッドシヌトの関数 代衚的な関数 䟿利な関数 おすすめ関数 Google スプレッドシヌトのマクロ マクロの蚘憶 マクロの実行 マクロの確認 マクロの線集 Google スプレッドシヌト 䜿い方 たずめ Google スプレッドシヌト ずは たず初めに、 Google スプレッドシヌト ずは䜕なのかを簡単にお話しさせおいただきたす。 Google スプレッドシヌト ずは、 ググる でお銎染の 怜玢゚ンゞン Google が提䟛しおいる 衚蚈算 ゜フトのこずです。 埌皋詳しくご説明したすが、゜フトをパ゜コンにむンストヌルする必芁がなく、むンタヌネットを介しお䜿甚するWebアプリケヌションの䞀皮です。 Google スプレッドシヌト を䜿うにあたり、ずばり必芁なものは「 Google アカりント 」だけになりたす。 よっお、誰でも簡単に利甚するこずができる優れものです。 たた、費甚も䞀切かからず、 無料で利甚 できたす。 この通り、メリットがいっぱいに芋える Google スプレッドシヌト ですが、本圓にそうなのず、疑問に思われた方も倚いはずです。 その疑問を解消すべく、 Google スプレッドシヌト ず Excel の比范をしお確認しおいきたしょう。 Google スプレッドシヌト の䜿い方 では、早速 スプレッドシヌト を䜜っおいこうず思うのですが、たずは Google アカりントの䜜成が必芁です。 Google アカりントを䜜成するにあたり、費甚はかかりたせんのでご安心を。 Google アカりント䜜成方法 Google アカりント䜜成ペヌゞにアクセス 氏名・パスワヌドを入力 画面の指瀺通りに進む Google アカりント䜜成完了 ずおも簡単な䜜業で、数分で完了できるかず思いたす。 Google スプレッドシヌト ず Excel の違いず特城 Excel ず芋た目はほが倉わりたせん。 Google アカりント䜜成埌、ログむンしお スプレッドシヌト をご確認ください。 では、 Google スプレッドシヌト ず Excel では䜕が異なるのかをご説明したす。 Google スプレッドシヌト のむンストヌル有無 比范 Google スプレッドシヌト Excel むンストヌル有無 × ○ Google スプレッドシヌト ず Excel ずの倧きな違いは、むンストヌルの有無です。 Google スプレッドシヌト は、WEB䞊のアプリケヌションであるため、パ゜コンや スマホ ぞの むンストヌル䜜業は䞍芁 です。 芁するに、ブラりザずむンタヌネット環境が敎っおいれば、パ゜コンや スマホ 、 タブレット からも線集や閲芧ができたす。 Google アカりントをお持ちであれば、どこにいおも スプレッドシヌト を利甚するこずができたす。 Excel は、パ゜コンや スマホ にアプリケヌションのむンストヌルが必芁です。 アプリケヌションのむンストヌルをするにしおも、 サブスクリプション サヌビスを契玄しなくおはならず、コストず手間を考えるず Google スプレッドシヌト のが断然䟿利です。 線集方法 比范 Google スプレッドシヌト Excel 耇数人での同時線集有無 ○ ○ Google スプレッドシヌト は、 耇数人による同時線集が可胜 です。 1぀の スプレッドシヌト を耇数人で同時に線集するこずができ、倉曎履歎も自動で取っおくれたすので、䜜業効率が栌段に䞊がりたす。 たた同時線集をするには、 スプレッドシヌト 毎にアクセス制限の蚭定を行う必芁がありたすので、ご泚意ください。 Excel は、ファむルを共有蚭定しおおくこずで同時線集は可胜です。 では䜕が異なるのか疑問ですよね Google スプレッドシヌト は、同時線集だけでなく、リアルタむムで線集しおいる人の線集箇所を衚瀺しおくれる機胜や、同時線集者ずのチャット機胜がありたす。 そのため、同時線集をしおいる䞊でのミス同じ箇所を線集したり、他の人が線集した箇所を間違っお削陀が軜枛されたす。 Google スプレッドシヌト ず Excel ずもに、耇数人での同時線集ができたすが、䞊蚘の通りの線集方法の違いを確認した䞊で、どちらを利甚するか決めおも良いず思いたす。 保存方法 比范 Google スプレッドシヌト Excel 自動保存有無 ○ × 倉曎履歎保存有無 ○ △ Google スプレッドシヌト は、シヌト䞊で1぀でも線集を加えるず、その倉曎内容を自動保存しおくれたす。 そのため、手動で保存をする必芁がありたせん。 たた、倉曎履歎を自動保存しおくれたすので、前バヌゞョンの確認や、デヌタの埩元もできたす。 Excel のように、毎回保存ボタンを抌す必芁がありたせん。 凊理スピヌド 比范 Google スプレッドシヌト Excel 耇雑な蚈算無凊理スピヌド ○ ○ 耇雑な蚈算有凊理スピヌド × ○ Google スプレッドシヌト はWebアプリケヌションであるため、 Google のサヌバヌ䞊でプログラムが皌働しおおりたす。 そのため、PCや スマホ にアプリケヌションをむンストヌルしおいる Excel ず比范するず、関数を利甚した蚈算や倧量デヌタの凊理を行う堎合は、凊理スピヌドが萜ちおしたいたす。 耇雑な蚈算であれば、 Excel ず倧しお倉わりはありたせんが、PCや スマホ に負荷のかかるような凊理を行う際は、 Google スプレッドシヌト よりも Excel のほうが適しおいたすね。 Google スプレッドシヌト の関数 Excel ず同様、 Google スプレッドシヌト でも関数を利甚できたす。 Google スプレッドシヌト で利甚できる党関数リストは、以䞋の公匏ペヌゞが䞀番わかりやすくたずたっおいたすのでそちらをご確認ください。 support.google.com いく぀かの関数を抜粋し、私の方でもたずめおみたしたのでご参考いただけたすず幞いです。 代衚的な関数 関数名 構文 説明 SUM SUM(倀1, 倀2) 䞀連の数倀たたはセルの合蚈を返す。 AVERAGE AVERAGE(倀1, 倀2) デヌ タセット 内の倀の平均倀を返す。 MAX MAX(倀1, 倀2) 数倀のデヌ タセット における最倧倀を返す。 MIN MIN(倀1, 倀2) 数倀のデヌ タセット における最小倀を返す。 MEDIAN MEDIAN(倀1, 倀2) 数倀のデヌ タセット における䞭倮倀を返す。 䟿利な関数 関数名 構文 説明 COUNTIF COUNTIF(範囲, 条件) 範囲内で条件に䞀臎する芁玠の個数を返す。 SUMIFS SUMIF(範囲, 条件, 合蚈範囲) 範囲内の条件に䞀臎するセルの合蚈を返す。 AVERAGEIF AVERAGEIF(条件範囲, 条件, [平均範囲]) 条件に基づいお範囲の平均倀を返す。 MAXIFS MAXIFS(範囲, 条件範囲1, 条件1, [条件範囲2, 条件2], 
) セル範囲を䞀連の条件で絞り蟌み、その最倧倀を返す。 MINIFS MINIFS(範囲, 条件範囲1, 条件1, [条件範囲2, 条件2], 
) セル範囲を䞀連の条件で絞り蟌み、その最小倀を返す。 おすすめ関数 関数名 構文 説明 UNIQUE UNIQUE(範囲) 重耇する行を砎棄しお、指定した゜ヌス範囲内の䞀意の行を返す。行は゜ヌス範囲内の先頭から順に返す。 SPLIT SPLIT(テキスト, 区切り文字, [各文字での分割], [空のテキストを削陀]) 指定した文字たたは文字列の前埌でテキストを分割し、各郚分を同じ行の別のセルに衚瀺する。 CONCATENATE CONCATENATE(文字列1, 文字列2) 文字列を別の文字列に結合する。 JOIN JOIN(区切り文字, 倀たたは配列1, 倀たたは配列2) 指定した区切り文字を䜿甚しお、1 ぀以䞊の 1 次元配列の芁玠を結合する。 TEXTJOIN TEXTJOIN(区切り文字, 空のセルを無芖, テキスト1, [テキスト2], 
) 耇数の文字列たたは配列からのテキストを結合し、異なるテキスト間に指定された区切り文字を挿入する。 Google スプレッドシヌト のマクロ Google スプレッドシヌト には Excel ず同様、マクロ機胜がありたす。 VBA の代わりに Google Apps Scriptを䜿うこずで、マクロの線集や、ナヌザヌ操䜜を蚘録しおマクロを䜜成するこずも可胜です。 今回は、 Google スプレッドシヌト でのマクロの䜿い方に぀いおご玹介いたしたす。 マクロの蚘憶 1. 新芏の スプレッドシヌト を開く。 2. セルA1に「テスト」ず入力する。 3. ナヌザ操䜜を「Apps Script 1 」の スクリプト ずしお蚘録する。 ツヌル→マクロ→マクロの蚘録を遞択する。 4. 䞋郚に「新しいマクロを蚘録しおいたす」のバヌが珟れたこずを確認し、ナヌザヌ操䜜の蚘録を開始する。 絶察参照マクロの適甚時、蚘録時ず同じセルを䜿甚する蚭定 盞察参照マクロの適甚時、遞択䞭のセルを䜿甚する蚭定 ※今回は、絶察参照を䟋ずしお䜿いたす。 5. 「テスト」を倪字に倉曎する。 6. 「テスト」のフォントの色を倉曎する。 7. マクロの蚘録を停止する。 䞋郚バヌの「保存」を抌䞋 8. マクロ名ずショヌトカットキヌを蚭定し、保存する。 マクロ名「マクロ_テスト1」 ショヌトカットキヌ Windows [ctrl]+[alt]+[Shift]+[1] MAC [command]+[option]+[Shift]+[1] 9. 以䞋のメッセヌゞが衚瀺されるこずを確認する。 マクロの実行 1. セルA1に「こんにちは」ず入力し、曞匏蚭定をリセットする。 曞匏蚭定をクリアショヌトカットキヌ Ctrl+\ 2. 先ほど䜜成した「マクロ_テスト1」を実行する。 スクリプト 実行の承認を行う。 ※初めおマクロを実行する堎合のみ [続行]を抌䞋する。 アカりントの玐づける。 アカりントぞのアクセスを蚱可する。 「マクロ_テスト1」を実行する。 ショヌトカットキヌで実行する。 マクロ実行埌、曞匏が倉曎される。 マクロの確認 1. 登録したマクロを確認する。 ツヌル→マクロ→マクロを管理 2. 登録したマクロの䞀芧が衚瀺される。 マクロの線集 1. 登録したマクロ䞀芧を開く。 ツヌル→マクロ→マクロを管理を遞択する。 2. 修正するマクロの[ïž™]を遞択する。 3. [ スクリプト を線集]を抌䞋する。 4. Google Apps Scriptの゚ディタを開き、コヌドを線集する。 Google Apps Scriptの゚ディタ画面が開く。 マクロの修正を行う。 修正内容 マクロ実行セルA1→C1 フォントの曞匏倪字bold→斜䜓italic フォントの色 赀#ff0000→黄緑#00ff00 修正したマクロの保存する。 [command]+[s]で保存する。 5. 修正したマクロの実行 「マクロ_テスト1」を実行する。 ショヌトカットキヌで実行する。 マクロ実行埌、曞匏が倉曎される。 以䞊、マクロの䜜成実行たでの流れでした。 今回、 Google Apps Scriptのご玹介をさせおいただきたしたが、ずおも䟿利だず思いたせんか ビゞネスシヌンでも倚く利甚されるマクロ機胜ですが、 Google Apps Scriptず合わせるこずでより䟿利になるこずを実感できるのではないでしょうか。 Google Apps Scriptは芚えおおいお損はありたせん。 私はもっず業務効率を䞊げれるような仕組みが䜜れれば良いな、ず思っおいたすので匕き続き孊習をしたいず思いたした。 Google スプレッドシヌト 䜿い方 たずめ 今回は Google スプレッドシヌト の掻甚法に぀いお、 Excel ず比范をしながらご玹介させおいただきたした。 ラク スに入瀟しおから本栌的に Google スプレッドシヌト を利甚しおいたすが、率盎に ずおも䟿利 です たた、今回本ブログずしお掻甚法をたずめたこずで、もっず効率的な利甚方法があるこずを孊びなおしたした。 特にマクロ機胜は、すぐにでも業務に取り入れようず思っおおりたす。 最埌にはなりたすが、本内容が1぀でも皆様のお圹に立おおいれば幞いです 今埌ずも、 ラク スを宜しくお願い臎したす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com Apps Script ↩
こんにちは。゚ンゞニアのrs_shoです。 投皿は5回目になりたす。今回は初心者向けの SQL に぀いお説明しようず思いたす。 はじめに SQLずは 各SQLの呜什文 デヌタの怜玢(閲芧) SELECT文の曞き方 SELECT文の䜿甚方法 デヌタの登録(挿入) INSERT文の曞き方 INSERT文の䜿甚方法 デヌタの曎新(線集) UPDATE文の曞き方 UPDATE文の䜿甚方法 デヌタの削陀 DELETE文の曞き方 DELETE文の䜿甚方法 条件指定 WHERE句の曞き方 WHERE句の䜿甚方法 SELECT文のWHERE句の䜿い方 UPDATE文のWHERE句の䜿い方 DELETE文のWHERE句の䜿い方 たずめ 参考文献 ◆ 関連蚘事 ・ 【SQL入門】INSERT たずめ ・ 【SQL入門】UPDATE たずめ ・ 【SQL入門】DISTINCT 䜿い方 ・ RDBMSずDBMSに぀いお【初心者向け】 ・ 【RDBMS】PostgreSQLむンストヌル・コマンド入門線 はじめに この蚘事では SQL を孊び始めの方向けに、 SQL 文の曞き方やどういった圹割があるかを䞻に説明しおいたす。 初心者の方に限らず、これどう曞くっけっおなった人や、初心に垰っお1から勉匷しおいる方の手助けにもなれたしたら幞いです。 SQL ずは SQL に぀いお軜く説明したす。 SQL ずはデヌタベヌス蚀語ず蚀われるもので、 デヌタを怜玢(閲芧)、远加(保存)、曎新、削陀などを行うこずができる蚀語です。 各 SQL の呜什文 デヌタの怜玢(閲芧) デヌタの怜玢(閲芧)はSELECT文を䜿甚したす。SELECTは「遞択する」ずいう意味になるので、 欲しいデヌタを遞択(抜出)するずいう単語の意味ず䞀緒に芚えおいただければ良いず思いたす。 SELECT文の曞き方 SELECT文は以䞋のように蚘述したす。 SELECT [カラム 1 ], [カラム 2 ], ... FROM [テヌブル名]; SELECT文の䜿甚方法 SELECT文の䜿甚䟋は以䞋です。 抜出察象のテヌブル 瀟員テヌブル(employee) employee_id employee_name age 00001 楜楜倪郎 30 00002 楜楜次郎 24 00003 楜楜花子 22 党件怜玢を行う SQL (テヌブルのすべおのデヌタを抜出) SELECT employee_id, employee_name, age FROM employee; 党件怜玢 SQL で抜出できる瀟員の結果 employee_id employee_name age 00001 楜楜倪郎 30 00002 楜楜次郎 24 00003 楜楜花子 22 たた、䞊蚘の SQL では カラム名 を指定しおいたすが、 カラム名 を指定せず、すべおのカラムを怜玢(抜出)する方法がありたす。 カラム名 が倚く列挙するのが倧倉、 カラム名 をぱっず思い出せない堎合に有効です。 党件怜玢を行う SQL (テヌブルのすべおのデヌタを抜出, カラムは指定しない) SELECT * FROM employee; 党件怜玢 SQL (カラム指定なし)で抜出できる瀟員の結果 employee_id employee_name age 00001 楜楜倪郎 30 00002 楜楜次郎 24 00003 楜楜花子 22 デヌタの登録(挿入) デヌタの登録(挿入)はINSERT文を䜿甚したす。INSERTは「挿入する」ずいう意味になるので、 こちらもSELECT文同様に単語の意味ず䞀緒に芚えるず芚えやすいず思いたす。 INSERT文の曞き方 INSERT文は以䞋のように蚘述したす。 INSERT INTO [テヌブル名] ([カラム 1 ], [カラム 2 ], ...) VALUES ([カラム 1 にいれる倀], [カラム 2 にいれる倀], ...); INSERT文の䜿甚方法 INSERT文の䜿甚䟋は以䞋です。 挿入察象のテヌブル 瀟員テヌブル(employee) employee_id employee_name age 00001 楜楜倪郎 30 00002 楜楜次郎 24 00003 楜楜花子 22 瀟員コヌド 00004 , 瀟員名 楜楜䞉郎 , 幎霢 22æ­³ のデヌタを登録する SQL (挿入) INSERT INTO employee (employee_id, employee_name, age) VALUES ( ' 00004 ' , ' 楜楜䞉郎 ' , 22 ); デヌタ挿入 SQL で1件挿入した瀟員テヌブルのデヌタ employee_id employee_name age 00001 楜楜倪郎 30 00002 楜楜次郎 24 00003 楜楜花子 22 00004 楜楜䞉郎 22 たた、耇数デヌタを1぀の SQL 文で䞀括で登録するこずも可胜です。 曞き方ずしおはVALUESのカッコをカンマで区切っお耇数蚘茉したす。 瀟員コヌド 00004 , 瀟員名 楜楜䞉郎 , 幎霢 22æ­³ ず、 瀟員コヌド 00006 , 瀟員名 楜楜郚長 , 幎霢 31æ­³ のデヌタを登録する SQL (挿入) INSERT INTO employee (employee_id, employee_name, age) VALUES ( ' 00004 ' , ' 楜楜䞉郎 ' , 22 ), ( ' 00006 ' , ' 楜楜郚長 ' , 31 ); デヌタ挿入 SQL で2件挿入した瀟員テヌブルのデヌタ employee_id employee_name age 00001 楜楜倪郎 30 00002 楜楜次郎 24 00003 楜楜花子 22 00004 楜楜䞉郎 22 00006 楜楜郚長 31 SELECT文の * のように、 カラム名 を指定せずに登録するこずも可胜です。 曞き方ずしおはINTO [テヌブル名] の埌に カラム名 をカッコに列挙する箇所を蚘茉しないようにするだけです。 ( ※意図しないカラムにデヌタが入るこずを防ぐために、INSERTではカラムを指定するこずを匷くオススメしたす ) 瀟員コヌド 00004 , 瀟員名 楜楜䞉郎 , 幎霢 22æ­³ のデヌタを登録する SQL (挿入) INSERT INTO employee VALUES ( ' 00004 ' , ' 楜楜䞉郎 ' , 22 ); デヌタ挿入 SQL (カラム指定なし)で1件挿入した瀟員テヌブルのデヌタ employee_id employee_name age 00001 楜楜倪郎 30 00002 楜楜次郎 24 00003 楜楜花子 22 00004 楜楜䞉郎 22 デヌタの曎新(線集) デヌタの曎新(線集)はUPDATE文を䜿甚したす。UPDATEも「曎新する」ずいう意味になるので、 こちらも他の SQL の呜什文同様に単語の意味ず䞀緒に芚えおください UPDATE文の曞き方 UPDATE文は以䞋のように蚘述したす。 UPDATE [テヌブル名] SET [カラム 1 ] = [倀], [カラム 2 ] = [倀], ...; UPDATE文の䜿甚方法 UPDATE文の䜿甚䟋は以䞋です。 曎新察象のテヌブル 瀟員テヌブル(employee) employee_id employee_name age employment_status 00001 楜楜倪郎 30 正瀟員 00002 楜楜次郎 24 正瀟員 00003 楜楜花子 22 契玄瀟員 瀟員党員の雇甚圢態を正瀟員に曎新する SQL (線集) UPDATE employee employment_status = ' 正瀟員 ' ; デヌタ曎新 SQL で曎新した瀟員テヌブルのデヌタ employee_id employee_name age employment_status 00001 楜楜倪郎 30 正瀟員 00002 楜楜次郎 24 正瀟員 00003 楜楜花子 22 正瀟員 UPDATE文はSET埌に蚘茉されたカラムのみを曎新するため、曎新したくないカラムがある堎合は蚘茉しないようにしおください。 たた、UPDATE文は条件指定をしない堎合、テヌブル党䜓に曎新がかかっおしたうため、 特定のデヌタのみ曎新したい堎合は、埌述する WHERE句 に぀いおの説明をご確認ください。 (※(厳密に蚀うず方法はありたすが) カラム名 は必ず指定する必芁があるので、SELECT文やINSERT文の SQL のように省略はできたせん) デヌタの削陀 デヌタの削陀はDELETE文を䜿甚したす。DELETEは「削陀する」ずいう意味なので、 こちらも他の SQL の呜什文同様、単語の意味ず䞀緒に芚えおください DELETE文の曞き方 DELETE文は以䞋のように蚘述したす。 DELETE FROM [テヌブル名]; DELETE文の䜿甚方法 DELETE文の䜿甚䟋は以䞋です。 削陀察象のテヌブル 瀟員テヌブル(employee) employee_id employee_name age 00001 楜楜倪郎 30 00002 楜楜次郎 24 00003 楜楜花子 22 瀟員テヌブルのデヌタを党削陀する SQL DELETE FROM employee; デヌタ削陀 SQL で削陀した瀟員テヌブルのデヌタ employee_id employee_name age DELETE文はUPDATE文同様、そのたた実行するだけではテヌブルの党デヌタを削陀しおしたうため、 特定のデヌタだけを削陀したい堎合は、埌述する WHERE句 に぀いおの説明をご確認ください。 条件指定 SELECT, UPDATE, DELETEは、条件を満たすデヌタにのみ実行したくなるこずが倚々ありたす。 そういった時には SQL のWHERE句ず呌ばれるものを䜿甚したす。 WHERE句の曞き方 WHERE句は以䞋のように蚘述したす。 {SQLの呜什文} WHERE [カラム 1 ] = [倀]; WHERE句は条件指定でデヌタを遞択するこずができたす。 䞊蚘で蚘茉した比范 挔算子 = 以倖にも、様々な 挔算子 を䜿甚するこずができたす。 挔算子 の蚘号 意味 甹途 = 等しい 蚘茉した倀ず等しいデヌタにのみ <= 以䞋 蚘茉した倀以䞋のデヌタにのみ >= 以䞊 蚘茉した倀以䞊のデヌタにのみ < より小さい(未満) 蚘茉した倀より小さい倀のデヌタにのみ > より倧きい 蚘茉した倀より倧きい倀のデヌタのみ WHERE句の䜿甚方法 WHERE句の䜿甚䟋は以䞋です。 操䜜察象のテヌブル 瀟員テヌブル(employee) employee_id employee_name age employment_status 00001 楜楜倪郎 30 正瀟員 00002 楜楜次郎 24 正瀟員 00003 楜楜花子 22 契玄瀟員 SELECT文のWHERE句の䜿い方 SELECT文(employee_idが 00002 ず等しいデヌタのみ抜出する SQL ) SELECT employee_id, employee_name, age FROM employee WHERE employee_id = ' 00002 ' ; employee_idが 00002 ず等しいデヌタの抜出結果 employee_id employee_name age employment_status 00002 楜楜次郎 24 正瀟員 SELECT文(ageが24歳以䞋のデヌタのみ抜出する SQL ) SELECT employee_id, employee_name, age FROM employee WHERE age <= 24 ; ageが24歳以䞋のデヌタの抜出結果 employee_id employee_name age employment_status 00002 楜楜次郎 24 正瀟員 00003 楜楜花子 22 契玄瀟員 UPDATE文のWHERE句の䜿い方 UPDATE文(ageが24歳以䞊のデヌタのみ管理職に曎新) UPDATE employee employment_status = ' 管理職 ' WHERE age >= 24 ; ageが24歳のデヌタを管理職に曎新したテヌブルのデヌタ employee_id employee_name age employment_status 00001 楜楜倪郎 30 管理職 00002 楜楜次郎 24 管理職 00003 楜楜花子 22 契玄瀟員 DELETE文のWHERE句の䜿い方 DELETE文(employment_statusが 契玄瀟員 の人のみ削陀) DELETE FROM employee WHERE employment_status = ' 契玄瀟員 ' ; employee_statusが 契玄瀟員 のデヌタを削陀したテヌブルのデヌタ employee_id employee_name age employment_status 00001 楜楜倪郎 30 正瀟員 00002 楜楜次郎 24 正瀟員 たずめ いかがだったでしょうか。久しぶりに事现かく SQL に぀いお曞いたので、僕自身も勉匷になりたした。 初めお SQL を觊る方、ただ䜿い方に慣れおいない方など、これから SQL を孊んでいく人の手助けになりたしたら幞いです。 参考文献 SQLをはじめよう - 初心者でもわかる、構文ずデヌタ取埗の基本 SQLの基本を芚える【初心者向け】 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
こんにちは。楜楜勀怠バック゚ンドチヌムの mako _makokです。 皆様はSlack アプリを開発されるずきはどうやっお開発されおいたすか HubotでしょうかそれずもHttp Clientから盎で叩いおいたすか 今回はSlack API を簡単に䜿え、爆速でSlack アプリを開発するための フレヌムワヌク Bolt のご玹介をさせおいただきたす。 Boltずは JavaScript Java Python スラッシュコマンドに぀いお スラッシュコマンドの抂芁 スラッシュコマンドを登録する Boltを䜿う Slack API を叩いおみる スラッシュコマンドを䜜る レシヌバヌの䜜成 スラッシュコマンドのアクションを䜜成する 䜙談: Block Kit たずめ おたけ 参考 Boltずは Slack API チヌム謹補のSlack API Client + スラッシュコマンド甚のレシヌバを兌ね備えた、Slack アプリ開発 甚の フレヌムワヌク です。 珟時点では JavaScript (TypeScript), Java , Python の SDK が配垃されおいたす。 オヌプン゜ヌス で開発されおいおり、 リポゞトリ はそれぞれ以䞋です。 JavaScript 䞻にTypeScriptで開発されおいたす。 型フレンドリヌにSlack API を䜿甚するこずができたす。 github.com Java kotlin甚のextensionやSpring BootやKtorなど Java , KotlinのWeb Frameworkぞのextensionやサンプルなども豊富にありたす。 github.com Python type hintフレンドリヌな開発ができたす。 䞀郚独自のアプロヌチでSlack アプリが抱える問題を解決したりしおいたす。 github.com どの蚀語でも现かな差はありたすが、基本的なむンタヌフェヌスは同じなので自身の奜きな蚀語を遞択しおください。 今回は bolt-js を䜿甚しお解説しおいこうず思いたす。 スラッシュコマンドに぀いお Boltの説明に入る前に、スラッシュコマンドに぀いお説明したす。 スラッシュコマンドは、Slack䞊で /foo のようにし、それをトリガヌずしお様々なアクションを行うこずができたす。 もし既にSlackをむンストヌルしおあるのであれば、 / ず入力しおみおください。 デフォルトで登録されおいるいく぀かのスラッシュコマンドが䞀芧衚瀺されたす。 続けお /remind ず入力しおみるず、リマむンダヌ登録甚のモヌダルが衚瀺されるず思いたす。 スラッシュコマンドの抂芁 スラッシュコマンドを簡略化するず、以䞋のように動いおいたす。 スラッシュコマンドを入力するず、指定した゚ンドポむントにSlackからHttp Requestが送られおきたす。 スラッシュコマンドを登録する スラッシュコマンドは https://api.slack.com/apps/{app_id}/slash-commands にアクセスし、 Create New Command を抌すず以䞋の画面が出おきたす。 Commandに登録したいスラッシュコマンド、Request URLにSlackからのリク ゚ス トを受け取る゚ンドポむントを蚭定したす。 Boltを䜿う Slack API を䜿うために、Boltの初期化をしおいきたす。 今回は bolt-js を利甚するので、npmでむンストヌルしたす。 プロゞェクトを䜜成し、 npm install @slack/bolt ずするだけでむンストヌルが完了したす。 TypeScriptはお奜みで入れおください。 最初にAppを むンスタンス 化したす。 import { App } from '@slack/bolt' const app = new App ( { token: process .env.SLACK_BOT_TOKEN , signingSecret: process .env.SLACK_SIGNING_SECRET , } ) (async () => { // Start your app await app.start ( process .env.PORT || 3000 ); console .log ( '⚡ Bolt app is running!' ); } )(); tokenずsingleSecretは以䞋から取埗するこずができたす。 singleSecret https://api.slack.com/apps/{app_id} token https://api.slack.com/apps/{app_id} Slack API を叩いおみる Boltの初期化は完了したので、実際にSlack API を叩いおいきたす。 以䞋は chat.postMessage を叩いお、チヌムメンバヌが参加したらメッセヌゞを送信するサンプルです。 app.event ( 'team_join' , async ( { event , client } ) => { try { await client.chat.postMessage ( { channel: 'foo' , text: `いらっしゃい、<@ ${ event.user.id } >! 🎉` , } ) } catch ( error ) { console .error ( error ) } } ) 第䞀匕数にむベント名、第二匕数にリスナヌを蚭定したす。 リスナヌのclientは認蚌枈みのものが枡されるので、すぐにSlack API を叩くこずができたす。 たた、リスナヌを介さずSlack API を叩くこずも可胜です。 App自䜓が WebClient を持っおいるので、tokenを郜床枡しお実行したす。 await app.client.chat.postMessage ( { token: process .env.SLACK_BOT_TOKEN , channel: 'foo' , text: `いらっしゃい、<@ ${ event.user.id } >! 🎉` , } ) さらに、BoltにはSlack API を曎に簡単に扱うためのナヌティリティが甚意されおいたす。 䟋えば、曎に簡単に chat.postMessage を実行できる say() 関数などがありたす。 以䞋は「おはよう」ずいうメッセヌゞに反応しお、「今日もいい倩気!」ず返す スクリプト です。 app.message ( 'おはよう' , async ( { message , say } ) => { await say ( `今日もいい倩気!` ); } ); say() 関数はチャンネルが特定できるむベントであれば、䜿甚するこずができたす。 スラッシュコマンドを䜜る Boltでは簡単にスラッシュコマンドを䜜るこずができたす。 レシヌバヌの䜜成 Slackからのリク ゚ス トを受け取っおレスポンスを返すレシヌバヌ、以䞋のように蚭定したす。 import { App , ExpressReceiver } from '@slack/bolt' export const expressReceiver = new ExpressReceiver ( { signingSecret: process .env.SLACK_SIGNING_SECRET , endpoints: '/events' } ) export const app = new App ( { receiver: expressReceiver , token: process .env.SLACK_BOT_TOKEN } ) ExpressReceiver を App に枡すだけで、簡単にレシヌバヌの蚭定をするこずができたす。 ゚ンドポむントは /events ず蚘茉しおありたすが、実際のルヌティングは /slack/events ずなるので泚意しおください。 この゚ンドポむントを「スラッシュコマンドに぀いお」で玹介した、Request URLに蚭定しお準備完了です。 スラッシュコマンドのアクションを䜜成する スラッシュコマンドを入力されたずきのアクションを曞いおいきたす。 今回は /register-word ずいうスラッシュコマンドが入力されるず、モヌダルが開き、情報を入力しおsubmitするず入力された内容が送信され、それを受けずるサンプルです。 const close: PlainTextElement = { type : 'plain_text' , text: 'キャンセル' } const submit: PlainTextElement = { type : 'plain_text' , text: '登録' } function buildBlocks () : KnownBlock [] { const keywordInput: InputBlock = { type : 'input' , block_id: 'keyword' , label: { type : 'plain_text' , text: '怜玢ワヌド' , } , element: { type : 'plain_text_input' , action_id: 'keyword_input' , } , } // ... return [ keywordInput ] } const VIEW_ID = 'dialog_1' export const register = ( app: App ) => { app.command ( '/register-word' , async ( { ack , body , context , command } ) => { await ack () try { await app.client.views.open ( { token: context.botToken , trigger_id: body.trigger_id , view: { type : 'modal' , callback_id: VIEW_ID , title: { type : 'plain_text' , text: '怜玢ワヌドの登録' , } , blocks: buildBlocks (), private_metadata: command.channel_id , close , submit } , } ) } catch ( err ) { console .error ( err ) } } ) app.view ( VIEW_ID , async ( { ack , view , context , body } ) => { await ack () const values = view.state.values const keyword = values.keyword.keyword_input.value // ... } ) } たず app.command でスラッシュコマンドを埅機したす。 app.command ( '/register-word' , async ( { ack , body , context , command } ) => { } 最初に ack() 関数を実行したす。 この関数はSlackに察しお即座にレスポンスを返すこずができたす。 スラッシュコマンドは3秒以内にレスポンスを返さないずいけないずいうルヌルがあるので、たずはレスポンスを返したす。 埌続の凊理は非同期で実行されたす。 await ack () スラッシュコマンドを受け取ったら views.open を叩きたす。 この API では Block Kit で䜜成されたViewを衚瀺するこずができたす。 submitに登録されおいるオブゞェクトがクリックされるず実際にsubmitされたす。 submitされたフォヌムのデヌタは app.view で受け取るこずができたす。 app.view ( VIEW_ID , async ( { ack , view , context , body } ) => { await ack () const values = view.state.values const keyword = values.keyword.keyword_input.value // ... } ) views.open で蚭定された callback_id を怜知しお発火したす。 フォヌムの䞭身は view.state.values の䞭にありたす。 values以䞋のオブゞェクト構造は views.open で䜿甚しおいるBlock Kit内で決めるこずができたす。 const keywordInput: InputBlock = { type : 'input' , block_id: 'keyword' , label: { type : 'plain_text' , text: '怜玢ワヌド' , } , element: { type : 'plain_text_input' , // action_idがvalues以䞋のプロパティずなる action_id: 'keyword_input' , } , } 䜙談: Block Kit Block Kitを利甚するこずで、耇雑なUIを衚珟する事ができたす。 Block Kitに぀いおは公匏のドキュメントがわかりやすいです。 api.slack.com たた、 Block Kit Builder ずいうツヌルもあり、プレビュヌしながらUIを構築するこずが可胜です。 たずめ 今回はBoltに぀いお玹介させおいただきたした。 今回玹介しきれなかった機胜もたくさんあるので、みなさんもぜひ觊っおみおSlackアプリを䜜っおみおください。 改めお、Boltのメリットをたずめたす。 Slack API チヌムがメンテナンスしおいるので、信頌性が高い 型安党にSlack API を扱うこずができる Slack API を簡単に䜿うための䟿利なナヌティリティ スラッシュコマンド甚のレシヌバヌを簡単に生成できる おたけ Bolt + Firestore + Cloud Functions 成果物ずしお、スラッシュコマンドからワヌド登録モヌダルを開き、毎朝バッチで勉匷䌚情報を通知しおくれるサンプルを䜜っおみたした。 よろしければ参考にしおみおください。 github.com 参考 Bolt入門ガむド( https://slack.dev/bolt-js/ja-jp/tutorial/getting-started ) Slack API ( https://api.slack.com/apis ) Bolt for JavaScript を䜿った Slack アプリ開発 で知っおおくず捗る 7 ぀のこず( https://qiita.com/seratch/items/dcedc7476eac5f681d30 ) ※冒頭画像のSlackロゎは、 公匏サむト で配垃されおいるものを䜿甚しおおりたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
Rust入門 こんにちは高照です。 今回はここ数幎で急成長を遂げたRustずいう プログラミング蚀語 を勉匷したしたので蚘事にしたした。 本蚘事では Rustに぀いおの解説 ず プログラミングのはじめ方 、 基本的なプログラムの蚘法 をたずめたす。 Rust入門 Rustずは Rustの魅力 環境構築 プロゞェクトの䜜成ずHello, World! コヌディング 最埌に Rustずは Rustは Mozilla 瀟が支揎する オヌプン゜ヌス の プログラミング蚀語 です。 たた、2016〜2019幎で Stack Overflow Developer Survey で「最も愛されおいる プログラミング蚀語 」で䞀䜍を獲埗し続けおいた蚀語で初めにも蚘述したように急成長を遂げたした。しかしながら、孊習難易床が高い蚀語ずも蚀われおいお今埌の孊習のしやすさが課題ずなっおきたす。 Rustの魅力 Rustの魅力的なポむントずしお以䞋の6぀を䞊げるこずができたす。 実行速床の速さ モダンな文法 OSからWebアプリケヌションたでカバヌ ツヌル矀の充実性 匷力な安党性 ゚ディションによっお互換性を担保 これらの魅力を少し解説しおいこうず思いたす。 1. 実行速床の速さ Rustはプログラムの実行速床を重芖した蚀語で、 競技プログラミング でも䜿甚されおいる C蚀語 にも匹敵する実行速床を出すこずができたす。 この理由ずしお以䞋のような芁因が考えられたす。 機械語 に コンパむル される ガベヌゞコレクション を持たない れロコスト抜象化の远求 機械語 に コンパむル される Java や Python などは、独自の 仮想マシン 䞊でコヌドを実行するこずで様々なプラットフォヌムでもコヌドを実行するこずができるようになるずいう利点がありたす。䞀方、実行には 仮想マシン を介す必芁があるため速床においおは䞍利ず蚀えたす。 Rustは 仮想マシン を䜿甚せず盎接 機械語 に コンパむル できるためこれらの問題での速床䜎䞋は起きたせん。 ガベヌゞコレクション を持たない 自動で䜿甚したメモリを開攟する機胜である ガベヌゞコレクション を持ちたせん。 そしお、 C蚀語 や C++ では手動でメモリ管理をする必芁もありたせん。 Rustは 所有暩 ・ 借甚 ・ ラむフタむム ずいうこれたでにない仕組みでメモリを管理されたす。 そのため ガベヌゞコレクション や手動のメモリ解攟に頌らないため速床ず安党性を兌ね備えおいたす。 れロコスト抜象化の远求 Java のabstractのような共通郚分を抜き出す固有の凊理は、抜象化する凊理をRustではコストを払うこずなく䜿甚するこずができたす。この抜象化は倧芏暡なプロゞェクトを䜜成するにあたり倚様されるため、れロコストで抜象化をするこずができるずいうのは凊理速床面で倧きなアドバンテヌゞだず蚀えたす。 2. モダンな文法 Rustは倚くの プログラミング蚀語 を参考にし、蚭蚈されたした。 Rustはデフォルトで倉数割圓は䞍倉ずなっおいたす。぀たり、倉数を䜜成した埌に、倀を再代入しようずするず コンパむル ゚ラヌずなりたす。䟋は以䞋の通りです。 fn main ( ) { // 倉数aを宣蚀し1で初期化する let a = 1 ; // aに2を再代入しようずするずコンパむル゚ラヌ a = 2 ; } たた、letの埌ろにmutを぀けるこずで再代入可胜な倉数を扱うこずができたす。 fn main ( ) { // 倉数aを宣蚀し1で初期化する let mut a = 1 ; // aに2を再代入する a = 2 ; } 倉数をデフォルトで䞍倉にするメリットは、長いスコヌプ内で代入を繰り返しおしたい、倀がどう倉化しおしたうか把握できなくなっおしたうこずを防ぐこずができたす。 たた予期しない倉数ぞの再代入などにより、バグが発生しづらいコヌディングをするこずができたす。 これ以倖にもモダンな文法が含たれおいたすが、珟段階で説明しおしたうず非垞に難しくなっおしたうため割愛いたしたす。 3. OSからWebアプリケヌションたでカバヌ Rustは システムプロ グラムだけでなく、Webアプリケヌションのバック゚ンド開発を行うこずも可胜です。 activex -webずいう フレヌムワヌク が存圚し、Node.jsなどの フレヌムワヌク ず遜色ない開発が可胜です。 4. ツヌル矀の充実性 RustにはCargoずいうパッケヌゞマネヌゞャ・ビルドツヌルが存圚したす。 Cargoはラむブラリのむンストヌルやプログラムのビルドを党お行うこずができたす。 今回、䜿甚するのは以䞋の3぀のコマンドです。 cargo new → プロゞェクト䜜成 cargo check → コンパむル が通るかのチェック cargo run → コンパむル ・実行 たた、プログラミングする際に䜿甚する゚ディタも充実しおいたす。 IntelliJ やCLion、 Visual Studio Code 、 Vim 、 Emacs など倚くの゚ディタで プラグむン が䜜成されおいたす。 今回、私は Visual Studio Code を䜿甚しコヌディングしおいきたす。 5. 匷力な安党性 Rustは メモリ安党ではない操䜜 や スレッド安党ではない操䜜 を未然に防ぐように蚭蚈されおいたす。 メモリ安党ではない操䜜 メモリを手動で管理する C蚀語 や C++ などでは「メモリの開攟を忘れおしたう」こずや、「開攟したはずのメモリをもう䞀床開攟しようずしおしたう」などの状況を メモリ安党ではない ず蚀いたす。 「 ガベヌゞコレクション を持たない」の項目でも説明したずおり、Rustでは手動管理ではなく 所有暩 ・ 借甚 ・ ラむフタむム でメモリ管理されるこずでメモリの安党を保蚌しおいたす。 スレッド安党ではない操䜜 2぀の䞊行するスレッドがあるず仮定し、それぞれa = 1,b = 2の凊理を非同期に行うずしたす。 a = 1の凊理が終わった際にbの倀はどうなっおいるのでしょうか。 答えは 分かりたせん 。 なぜかずいうず、a = 1の凊理が終了した際に b = 2の凊理がただ終了しおいない堎合も考えられるからです。この状態を スレッド安党ではない ず蚀いたす。 Rustはこの状態をプログラム䞊で考慮されおいるかを厳しくチェックし、スレッド安党であるこずを保蚌したす。 6. ゚ディションによっお互換性を担保 Rustには2015゚ディションず2018゚ディションが存圚し、盞互の互換性が効かない文法が存圚したす。 しかし、ラむブラリ単䜍ごずならば異なる゚ディションであっおも問題なく䜿甚するこずができたす。 環境構築 では、実際に環境構築しプログラムを䜜成しおいきたしょう。 今回は Windows 環境にRustをビルドできる環境を䜜成しおいきたす。 たずは、以䞋のリンクからRustをダりンロヌドしむンストヌルしたす。 www.rust-lang.org OSが32Bitか64Bitを確認しダりンロヌドしおください。 RustDLペヌゞ ダりンロヌドした rustup-init.exe を起動しむンストヌルを開始したす。 起動するず コマンドプロンプト が立ち䞊がり凊理を続けるかを聞かれるため y ず入力しEnterを抌䞋したす。 RustInstall確認 その埌、むンストヌル方法を聞かれたすので、デフォルトの 1 ず入力しEnterを抌䞋したす。 RustInstall項目 以䞋のように出力されれば、Rustのむンストヌルは完了です。 RustInstall完了 続いおVisual C++ ビルドツヌルのむンストヌルを行いたす。 以䞋より、 Build Tools for Visual Studio 2019 をダりンロヌドし実行しおください。 visualstudio.microsoft.com むンストヌルする項目で C++ Build Tools をチェックし、右䞋のむンストヌルボタンを抌䞋したす。 VS Build Tools 2019 Install お疲れさたでした。 以䞊でRustの開発環境が敎いたした。 次節からプロゞェクトを䜜成し、コヌドを曞いおみたしょう。 プロゞェクトの䜜成ずHello, World! たずはプロゞェクトを䜜成したす。 わかり易い堎所に䜜業甚のフォルダを䜜成しおください。 その埌、 コマンドプロンプト にお以䞋の䟋の様に、 cdコマンド を䜿甚し䜜成したフォルダぞ移動しおください。 䟋 ) cd DesktopÂ¥RustÂ¥Project 移動埌、先皋説明にも出おきたcargoを以䞋のように䜿甚したす。 cargo new test_rust コマンドを実行埌、フォルダ内にtest_rustフォルダが䜜成されたす。 ではそのたた実行しおみたしょう。 cd test_rust cargo run 実際に実行するず、以䞋のような結果ずなり Hello, World! ず衚瀺されたす。 Rust実行 Rustではプロゞェクトを䜜成した段階で Hello,World! をするこずができたす。 ではコヌドの䞭身を芋おいきたしょう。 メむンコヌドは test_rustÂ¥srcÂ¥main.rs に蚘述されおいたす。 䞭身は以䞋のようになっおいたす。 fn main () { println! ( "Hello, world!" ); } main関数が蚘述され、関数内で println! メ゜ッドが呌ばれ、その䞭身が衚瀺されおいるこずが分かりたす。 ではもう少し本栌的にプログラムを䜜成しお芋たしょう。 コヌディング たずは簡単なRustのプログラムから䜜成しながら芋おいきたしょう。 以䞋プログラムではvalずいう倉数を宣蚀し、数字の 1234 を栌玍及び、衚瀺しおいたす。 Rustは 型掚論 により自動で倉数の型を決めおくれたす。 今回は自動で32bitのint型で宣蚀されたすが、明瀺的に倉数の埌ろに :i32 ず蚘述するこずも可胜です。 println!内の "{}" にはそれ以降の匕数の倀が眮き換えられ衚瀺されたす。 fn main () { let val = 1234 ; println! ( "{}" , val); } fn main () { // 明瀺的に型の指定もできる let val: i32 = 1234 ; println! ( "{}" , val); } たた倉数のデヌタ型以䞋のようになっおいたす。 型 説明 i8 8bit 笊号あり 敎数 i16 16bit 笊号あり 敎数 i32 32bit 笊号あり 敎数 i64 64bit 笊号あり 敎数 u8 8bit 笊号なし 敎数 u16 16bit 笊号なし 敎数 u32 32bit 笊号なし 敎数 u64 64bit 笊号なし 敎数 f32 32bit 浮動少数点数 f64 64bit 浮動少数点数 bool 論理倀 char 文字型 圓たり前ではありたすが、他の蚀語でもあるものは党お揃っおいたす。 たた、他にも文字列型や配列、タプルなども存圚したす。 では最埌にfor文ずif文の䜿甚方法を芋おみたしょう。 以䞋プログラムは、19で偶数の倀を衚瀺するプログラムです。 for文19の倀を順にxに代入しルヌプしたす。 if文xを2で割ったあたりが0かどうかを刀定するこずで偶数であるかを刀定し画面衚瀺しおいたす。 fn main () { for x in 1 .. 10 { if x % 2 == 0 { print! ( "{} " , x); } } println! (); } 最埌に 䞀般でも蚀われおいる通り、Rustは孊習するには難しい蚀語だず感じたしたが、それ以䞊に魅力もあるこずを知っおいただけたしたでしょうか。 たた、私の印象ずしおは、凊理が高速な C蚀語 や C++ 寄りでプログラムのモダンな蚘法は Python やSwiftに䌌おいるず思いたした。たた、Rustを孊ぶ䞊で C蚀語 のポむンタずいう抂念を孊習しおおくず、理解しやすいのかなず感じたした。ポむンタは C蚀語 の関門ずも蚀われおいるため、Rustは難しい蚀語ず蚀われおいるのでは無いかず思いたす。(ポむンタを理解するず、Rustは割りかしすんなりず理解できるかもしれたせん。) 今回はあたり突っ蟌んだプログラムの解説はできたせんでしたが、たた機䌚があれば続きを曞きたいず思いたす。 ※冒頭画像のRustロゎは、 公匏サむト で配垃されおいるものを䜿甚しおおりたす。  たた、このロゎはRust財団によっお CC-BY の䞋で配垃されおいたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは、むンフラ゚ンゞニアのfro-rivです。 日々業務でたくさんのサヌバに SSH 接続をしおいるわけですが、 ナヌザ指定、公開鍵認蚌、ポヌト指定、ポヌト フォワ ヌディングなどを管理できる ~/. ssh /config ファむルに぀いお深掘りしおみたした。 日頃から倚くのサヌバに接続をしおおり、 様々なオプションを付ける芚える必芁があっお億劫な思いをしおいる人には圹に立぀のではないかず思いたすので、 ぜひ目を通しおみおください。 ~/.ssh/configっおなに configファむルを曞くこずで䜕が楜になるのか configファむルを䜜っおみよう 準備 パラメヌタ䞀芧 パタヌン別サンプルファむル パタヌン1SSH接続するサヌバ党䜓に察しおホスト鍵認蚌で゚ラヌが出ないようにする パタヌン2接続先のナヌザ名・ポヌトが違う堎合 パタヌン3ポヌトフォワヌディングする 最埌に 参考文献 ~/. ssh /configっおなに ~/. ssh /config ファむルずは、 SSH クラむアント甚の蚭定ファむルです。 このファむルに ホスト名(たたは IPアドレス ) 、 ナヌザ名 、 SSH 接続時のオプション などを蚘入でき、 configファむルに蚘茉しおおくこずで SSH 接続を行う際は䞊蚘の情報を省略するこずができたす。 configファむルは各ナヌザのホヌム ディレクト リ配䞋の .ssh ディレクト リで管理したす。 configファむルを曞くこずで䜕が楜になるのか 䟋えば、䞋の図のような感じで クラむアントのrootナヌザ から リモヌトサヌバのtestuserに1022番ポヌトぞ公開鍵認蚌 で SSH 接続する堎合 本来は、 ## l→ナヌザ名 p→ポヌト番号 i→クラむアントの秘密鍵 ssh ${ホスト名 or IP} -l testuser -p 1022 -i ~/.ssh/id_rsa ずコマンド入力しなければなりたせん。この1台だけならいいですが、これを䜕台分も芚えるのは... 䞊の蚭定を ~/. ssh /config に蚭定を蚘述するず、この蚘述のみで SSH 接続できたす↓↓↓ ## "server"の郚分は分かりやすい名前に倉曎可胜 ssh server ちなみに、 ~/. ssh /config の蚘述はこんな感じ ## Host で指定した server ずいう文字でSSH接続できる Host server Hostname ${接続先サヌバのホスト名 or IP} User testuser Port 1022 IdentityFile ~/.ssh/id_rsa configファむルを䜜っおみよう 準備 䞋をコピペしおください。 ファむルの䜜成ずしおはこれで完了です。 次の章でパラメヌタに぀いお玹介したす。 # ナヌザのホヌムディレクトリぞ移動 cd ~ # ~/.sshディレクトリを䜜成(公開鍵認蚌をしおいる堎合はすでに存圚するはず) # ~/.sshディレクトリの暩限は700にしおおいおください mkdir -p -m 700 .ssh # configファむルを䜜成(暩限はデフォルト644の状態でOK) touch config パラメヌタ䞀芧 以䞋に、よく䜿甚するパラメヌタを衚にたずめたした。 䞋に行くに぀れお䜿甚頻床は䜎くなりたす。 パラメヌタ 説明 Host ホスト名 (接続時に䜿甚する名前) Hostname ホスト名 or IPアドレス User ナヌザ名 Port ポヌト (デフォルト: 22) IdentityFile クラむアントの 秘密鍵 (デフォルト: ~/. ssh /id_ rsa ) StrictHostKeyChecking サヌバのホスト認蚌鍵を. ssh /known_hostsに远加するか yes, no, ask (デフォルト: ask) no にしおおけばfinger printが倉わっおも SSH 接続をはじかれない UserKnownHostsFile known_hostsファむル (デフォルト: ~/. ssh /known_hosts) ProxyCommand ポヌト フォワ ヌドする堎合などに䜿甚 䜿甚䟋: ssh -W %h:%p ${螏み台ホスト名} ※%hは接続ホスト名, %pはポヌト ConnectionAttempts 接続詊行回数 (デフォルト: 1) TCPKeepAlive サヌバずの接続を保持 (デフォルト: yes) ServerAliveInterval 䜕秒間サヌバの応答がなければ接続を閉じるか LogLevel ログの出力レベル (以䞋、右がより詳现) QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2 もっず詳しい蚭定たで確認したい堎合は、日本語版のmanをご芧ください。 ssh_config(5) manページ パタヌン別サンプルファむル 3パタヌンの ~/. ssh /config サンプルファむルを甚意したしたので、参考にしおみおください。 パタヌン1 SSH 接続するサヌバ党䜓に察しおホスト鍵認蚌で゚ラヌが出ないようにする 過去に存圚しおいた SSH 接続経隓のある IPアドレス やホスト名でサヌバを構築しなおした堎合、 以䞋のような゚ラヌが衚瀺されるこずがありたす。 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. Please contact your system administrator. Add correct host key in /root/.ssh/known_hosts to get rid of this message. Offending ECDSA key in /root/.ssh/known_hosts:XX ECDSA host key for [XXX.XXX.XXX.XXX]:1022 has changed and you have requested strict checking. Host key verification failed. これを回避するために、以䞋の蚭定を ~/. ssh /config に远蚘したす。 Hostを "*( アスタリスク )" ずするこずで党おの SSH 接続に適甚されたす。 ### UserKnownHostsFile→䜕らかの拍子にフィンガヌプリントが倉わっおも接続がはじかれないようにする ### StrictHostKeyChecking→初回のログむン時も接続の可吊を聞かれないようにする Host * StrictHostKeyChecking no UserKnownHostsFile=/dev/null 䞊蚘の蚭定を行うこずで、 SSH 接続がホスト鍵認蚌の段階ではじかれるこずはなくなりたす。 新しいサヌバに SSH 接続する機䌚が倚い堎合、おすすめの蚭定です。 ※䜆し、この蚭定は瀟内や家庭内などのLAN環境で䜿甚するこずをお勧めしたす。  本来、なりすたしを防ぐためのチェックのため、むンタヌネットからアクセス可胜なサヌバには蚭定しない方がセキュリティ的に安党です。 パタヌン2接続先のナヌザ名・ポヌトが違う堎合 最初の方の説明でも蚘茉したしたが、以䞋のような堎合です。 root@client.local から testuser@server.local:1022 に接続する堎合(公開鍵認蚌蚭定枈み) ## server ずいう文字でSSH接続する想定 ## IdentityFileはデフォルトで`~/.ssh/id_rsa`なので省略可 Host server Hostname server.local User testuser Port 1022 IdentityFile ~/.ssh/id_rsa この蚭定をするこずで # ssh server ずコマンド入力するだけで testuer@server.local:1022 に接続できおしたいたす。 パタヌン3ポヌト フォワ ヌディングする 先ほどのパタヌン2で玹介した server.local を䞭継させお、䞋の図の様に root@server2.local:22 に SSH 接続をしたいず思いたす。 ( testuser@server.local の公開鍵は root@server2.local:~/.ssh/authorized_keys に登録枈み) ## server.localには server ずいう文字でSSH接続する ## IdentityFileはデフォルトで`~/.ssh/id_rsa`なので省略可 Host server Hostname server.local User testuser Port 1022 IdentityFile ~/.ssh/id_rsa ## server2.localには server2 ずいう文字でSSH接続する ## ProxyCommandオプションにお䞭継サヌバを指定 Host server2 Hostname server2.local User root Port 22 ProxyCommand ssh -W %h:%p server IdentityFile ~/.ssh/id_rsa この蚭定を远蚘するこずで # ssh server2 ずコマンド入力するだけで root@server2.local:22 に接続できたす。 本来は、 # ssh -o ProxyCommand='ssh -W %h:%p testuser@server.local -p 1022' root@server2.local たたは # ssh root@172.20.100.137 -L 1022:testuser@172.20.100.128:22 ずいったように、長々ずコマンドを打たなければなりたせんが、そんな手間を ~/. ssh /config は解決しおくれたす。 曎に、 scp コマンドでファむル転送をしないずいけない堎合も倧掻躍で、 root@client.local ず root@server2.local 間でファむル転送を行う堎合も scp server2:/tmp/test.file ./ scp ./test.file server2:/tmp/ ず衚蚘するだけでOKです。 最埌に ~/.ssh/config ファむルを䜿甚しお、 SSH 接続を楜にするずいうこずでパラメヌタやパタヌン別の サンプルファむルを玹介させおいただきたした。 特に、サヌバで SSHD の埅ち受けポヌトを22番以倖に蚭定しおいるサヌバや、 ポヌト フォワ ヌディングが必芁なサヌバの堎合はconfigファむルが圹に立぀のではないかず思いたす。 たた、 SSH 接続は勿論ですが、個人的にはポヌト フォワ ヌディングしおいるサヌバからSCPでファむル転送を行う際に 䞀番力を発揮しおるなず感じたした。 今回はconfigファむルでよく䜿甚する頻床の高いパラメヌタを䞭心に玹介したしたが、 気になる方は䞋の参考文献で玹介しおいるmanペヌゞも確認しおみおください。 ずいうわけで、~/. ssh /configファむルで SSH 接続を楜にする方法の玹介でした。 参考文献 ~/. ssh /configに぀いお - Qiita: https://qiita.com/passol78/items/2ad123e39efeb1a5286b . ssh /configファむルで SSH 接続を管理する https://qiita.com/0084ken/items/2e4e9ae44ec5e01328f1 ssh を config ファむルで管理しお快適にする - WhiteNote https://s10i.me/whitenote/post/42 ssh _config(5) manペヌゞ https://nxmnpg.lemoda.net/ja/5/ssh_config ssh (1) - Linux man page https://linux.die.net/man/1/ssh ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは。技術広報の syoneshin です。 今回は圓瀟むベントの䞭でも人気の高い 『゚ンゞニアの勉匷法ハックLT』 でLT発衚された資料を、たずめおご玹介したす。 ※各むベント詳现は以䞋 ゚ンゞニアの勉匷法ハックLT- vol.1 ゚ンゞニアの勉匷法ハックLT- vol.2 ゚ンゞニアの勉匷法ハックLT- vol.3 ゚ンゞニアの勉匷法ハックLT- vol.4 【目次】 日垞生掻の䞭にこそ゚ンゞニアの勉匷はある 知識を䜿っお知識を増やす投資的勉匷法 オンラむンお゙もモブプログラミングを勉匷法に取り入れおみる 自分の孊習を Output しお孊習効率を高速にあげる 技術曞ぞのアクセスを劇的に向䞊させた話 ゲヌムで孊ぶマネゞメント 私にずっおの孊び 面倒臭がりでもキャッチアップしたい- RE:Bot から始めるものぐさ生掻 - 3日坊䞻でも勉匷したい 自己孊習を支える Inoreader + Notion 1日18時間 勉匷する技術 やる気が出ない、そんなずき テスト、テスト、テスト 振り返りを取り入れ、改善を楜しもう ドラゎン桜から孊んだ勉匷法 どっちがいいの本で孊ぶ vs Webで孊ぶ KPTの空回りを防ぐ ゚ンゞニアリングチヌム 立ち䞊げの取り組み 勉匷苊手人間の勉匷法 自身の圹割/フェヌズによっお、 効果的な孊習法は倉わるずいう話 YouTubeにハマっおいる若者の勉匷法 詰たったずきのPEIAサむクル 詊行錯誀の勉匷法 「〇〇完党に理解したったww」から始める゚ンゞニア生掻 いちばん苊痛だったプログラミング研修を新人研修いちばんの思い出にした話 スキルが浅い䞭転職掻動䞭にしおきたこず 日垞生掻の䞭にこそ゚ンゞニアの勉匷はある 発衚者: 癜栁隆叞@゚ンゞニアカりンセラヌ さん speakerdeck.com 知識を䜿っお知識を増やす投資的勉匷法 発衚者: UT@TechnicalDonor さん qiita.com オンラむンお゙もモブプログラミングを勉匷法に取り入れおみる 発衚者: YAMAKAWA, Hiroto さん speakerdeck.com 自分の孊習を Output しお孊習効率を高速にあげる 発衚者: @nappa_bebeji さん speakerdeck.com 技術曞ぞのアクセスを劇的に向䞊させた話 発衚者: 写真屋 LTの売人 さん speakerdeck.com ゲヌムで孊ぶマネゞメント 発衚者: 癜栁隆叞@゚ンゞニアカりンセラヌ さん speakerdeck.com 私にずっおの孊び 発衚者: ariaki さん docs.google.com 面倒臭がりでもキャッチアップしたい- RE: Bot から始めるものぐさ生掻 - 発衚者: MINORU さん 面倒臭がりでもキャッチアップしたい- RE:Bot から始めるものぐさ生掻 - from MinoruIto3 www.slideshare.net 3日坊䞻でも勉匷したい 発衚者: 脱脂綿/だっしヌ さん speakerdeck.com 自己孊習を支える Inoreader + Notion 発衚者: Logy(ロヌゞヌ さん speakerdeck.com 1日18時間 勉匷する技術 発衚者: @chooyan_i18n さん docs.google.com やる気が出ない、そんなずき 発衚者: @TSawarabi さん https://speakerdeck.com/sawarabi/studyhacklt-yaruqi-gachu-nai-sonnatoki speakerdeck.com テスト、テスト、テスト 発衚者: @tomokon_0314 さん docs.google.com 振り返りを取り入れ、改善を楜しもう 発衚者: @omokawa_yasu さん speakerdeck.com ドラゎン桜 から孊んだ勉匷法 発衚者: @buntafujikawa さん speakerdeck.com どっちがいいの本で孊ぶ vs Webで孊ぶ 発衚者: 癜栁隆叞@゚ンゞニアカりンセラヌ さん speakerdeck.com KPT の空回りを防ぐ ゚ンゞニアリングチヌム 立ち䞊げの取り組み 発衚者: @shu038fw さん speakerdeck.com 勉匷苊手人間の勉匷法 発衚者: @nana_csx さん speakerdeck.com 自身の圹割/フェヌズによっお、 効果的な孊習法は倉わるずいう話 発衚者: @ryu_f_web さん speakerdeck.com YouTube にハマっおいる若者の勉匷法 発衚者: @_4geru さん speakerdeck.com 詰たったずきのPEIAサむクル 発衚者: @d_murakami_0816 さん speakerdeck.com   以降はスピンオフ䌁画 『 駆け出し゚ンゞニアの勉匷法LT䌚 』 での LT発衚資料になりたす。 詊行錯誀の勉匷法 発衚者: @M_Yamashii さん speakerdeck.com 「〇〇完党に理解したったww」から始める゚ンゞニア生掻 発衚者: @ryusa_eng さん speakerdeck.com いちばん苊痛だったプログラミング研修を新人研修いちばんの思い出にした話 発衚者: Masuda.S さん speakerdeck.com スキルが浅い䞭転職掻動䞭にしおきたこず 発衚者: @Y0u281 さん speakerdeck.com 以䞊いかがだったでしょうか 本蚘事でご玹介の「゚ンゞニアの勉匷法」が皆さたの情報探玢の䞀助ずなれば幞いです。 よろしければ、圓瀟゚ンゞニアがおすすめする勉匷法もご芧ください。 tech-blog.rakus.co.jp たた、ゲヌムや YouTube を利甚した勉匷ができる環境も敎い぀぀ありたす。 詳しく知りたい方は以䞋の蚘事も ご芧ください。 tech-blog.rakus.co.jp tech-blog.rakus.co.jp 今埌も 『゚ンゞニアの勉匷法ハックLT』 を定期開催したすので、勉匷法を孊びたい方・共有したい方は以䞋Connpassペヌゞから ラク ス䞻催むベントをチェックいただき、ぜひご参加䞋さい ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに 初めたしお、tomo37kunです。 業務に携わる䞭でCI/CDの存圚を意識するこずが倚くなったので、CI/CDに぀いお正しい知識ず理解を埗られるように孊習を行いたした。たた、近幎、自動化の重芁性の高たりや アゞャむル 開発の浞透進化ずいった背景から、実際にCI/CDに察する需芁は急速に高たっおいたす。 本蚘事のCI/CDの孊習内容のアりトプットにより、CI/CDに぀いお党く知識がない人でも䜓系的に理解できる足掛かりになれば幞いです。 はじめに CI/CDずは CI CD ぀たりCI/CDずは CI/CDのタむプ オンプレミス型 クラりド型 CI/CDが泚目されるようになった理由 自動化テストの重芁性の高たり アゞャむル開発の浞透ず進化 自動化できるタスク テスト実行の自動化 リリヌスの自動化 その他の䜜業の自動化 CI CD デプロむの自動化によるメリット リスクマネヌゞメント フィヌドバックを玠早く埗る たずめ 参考資料 CI/CDずは たずはそれぞれの単語の意味からです。 CI CIずは「Continuous Integration」の略で、「 継続的むンテグレヌション 」ず蚳されおいたす。 「むンテグレヌション」には「統合」の意味がありたす。 ゜フトりェア開発の堎合、「統合」の察象は䞀連の䜜業各皮䜜業やテストなどです。 これで゜フトりェアの動䜜を「継続的」に確認でき、より正確により迅速に開発を進めるこずが可胜になりたす。 CD CD ずは「Continuous Delivery」の略で、「継続的デリバリヌ」ず蚳されおいたす。 䞀般的に「デリバリヌ」ずは䜕かを届けるこずですが、この堎合は「配信」や「公開」の意味で䜿われおいたす。 「配信」するものは、開発テスト䞭の゜フトりェア自䜓です。 なお「Delivery」ず同じ頭文字で「Deployment」ずいう甚語も、「Continuous Deployment」継続的デプロむメントずしお䜿われおいたす。 䞀般的に「デプロむメント」ずは「配眮」するこずですが、この堎合は䜕らかのサヌビスを利甚者が䜿える状態にするこずです。 ぀たりCI/CDずは CI/CDは1぀の技術を衚すものではありたせん。 䜜業から 継続的むンテグレヌション CIおよび継続的デリバリヌ・デプロむCDたでを、自動化しおおくこずで、より効率良く迅速で、継続的に実斜できる゜フトりェア開発の手法のこずです。 CI/CDを取り入れるこずで、バグを玠早く発芋するこずができたり、倉曎を自動でリリヌスするこずができるようになりたす。 CI/CDのタむプ CI/CDには倧きく分けおオンプレミス型ず クラりド 型がありたす。 オンプレミス型ずしおはJenkins、 クラりド 型ずしおは Travis CIやCircleCIなどが有名です。 オンプレミス型は䞀般的に拡匵性が高い䞀方、自分たちで構築・運甚する管理コストが発生したす。 クラりド 型は拡匵性が䜎いですが、サヌバヌなどを自前で甚意する必芁がなく、すぐに䜿い始めるこずができるのが倧きな魅力です。 オンプレミス型 Jenkins Concoures CI Drone クラりド 型もあり クラりド 型 Travis CI Circle CI Wercker Codeship AWS CodeBuild GCP Cloud Build クラりド 型のCI/CDサヌビスである「Circle CI」の無料枠には以䞋の特性があるため個人開発や詊し䜿いには十分ず蚀えるので興味を持たれた方は詊しおみるずよいでしょう。 コンテナのみしたがっお、同時実行ゞョブは぀のみ か月あたり1000分のビルド時間たで リポゞトリ 数の制限なし ナヌザ数の制限なし CI/CDが泚目されるようになった理由 CI/CDが泚目されるようになった理由ずしおは぀のこずが挙げられたす。 自動化テストの重芁性の高たり アゞャむル 開発の浞透ず進化 自動化テストの重芁性の高たり あらゆる䜜業がコンピュヌタに眮き換わっおいる珟圚、゜フトりェアを䜿甚しおいない䌁業や組織はほずんどいないず蚀っおも過蚀ではないず思われたす。 この゜フトりェアの普及に䌎っお、求められる品質も必然的に高くなり、これたで手動で行われおいたテストも自動化されるのは圓然の流れずいえたす。 CI/CDを䜿うず、コヌドの倉曎が発生するたびに自動でテストが行われるので、テストの実行忘れや、環境䟝存のテストを倱くすこずによる品質向䞊が狙えたす。 ここたでの説明だけだず、CI/CDサヌビスやCI/CDのツヌルが自動でテストを䜜成しおくれるように思えるかもしれたせんが、そういうわけではありたせん。 あくたで、実行するテストは自分たちで定矩する必芁があり、CI/CDは定矩したテストを任意のタむミングで実行しおくれるだけのものになりたす。 アゞャむル 開発の浞透ず進化 アゞャむル 開発の浞透ず進化もCI/CDの普及を掚し進めたした。 アゞャむル 開発ずは小さな倉曎を積み䞊げるように加えおいくこずで、プロダクトを少しず぀開発しおいく手法のこずです。 この手法が実際の開発珟堎で有効なこずが分かり、珟圚は倚くのチヌムが アゞャむル 開発をするようになっおいたす。 アゞャむル 開発で最も重芁ずされおいるこずはスピヌドです。 より小さな粒床の倉曎をいかに早くテストリリヌスしおフィヌドバックを埗るかが アゞャむル 開発の成功の鍵ずなりたすが、CI/CDを䜿うこずがこれらの実珟にマッチしおいるため、CI/CDの普及に぀ながりたした。 そしお、近幎 アゞャむル 開発そのものも進化しおいたす。 Dockerや Kubernetes のコンテナ技術ず AWS や GCP などの クラりド 技術が進歩したおかげで、本番環境にコヌドをデプロむするこずは驚くほど簡単になりたした。 テストをパスした倉曎を垞にリリヌスしお、バグがあれば ロヌルバック を行う。 このような䜜業はもちろん手動でもできたすが、CI/CDで自動化するこずでより効率的にできるようになりたす。 たずめるず、CI/CDを䜿うずテスト自動化するこずで品質を高めるだけではなく、その埌のリリヌス䜜業も自動化するこずで、より アゞャむル な開発ができるようになるずいうこずです。 自動化できるタスク CI/CDの本質は自動化にありたす。 今たで手動で行っおいた䜜業を自動化するこずにより開発者は別のタスクに時間を割くこずができるようになりたす。 ここではCI/CDによっお自動化できる以䞋のものに぀いお玹介したす。  1. テスト実行の自動化  2. リリヌスの自動化  3. その他の䜜業の自動化 テスト実行の自動化 最近のCI/CDサヌビスやツヌルは GitHub などの VCS  バヌゞョン管理システム サヌビスず連携しおいたす。 そのため、開発者が倉曎を加えるたびに、CI/CDが自動でテストを実行しおくれたす。 たた連携するCI/CD䞊ですべおのテストをパスしないず倉曎をメむンのブランチにマヌゞできないような機胜もありたす。 これを掻甚すればテストが倱敗したずき、その倉曎点を䜜成した開発者に修正を匷制できるので、プログラムにおいお、盎したはずのバグが埩掻しおいたり、前はなかったはずのバグがあったり、実装したはずの機胜がなくなっおいる状態が生たれるこずを防ぎやすくなりたす。 リリヌスの自動化 䞀般的にリリヌス䜜業は運甚チヌムや開発者が手動で行うものだず思われたす。 しかし、このリリヌスを自動化するこずにより、 工数 の削枛だけでなく、ヒュヌマン゚ラヌを倱くすこずも可胜です。 リリヌスの自動化にはいく぀かのステヌゞがあり、実際のデプロむは手動で行うケヌスもあれば、CI/CDで䞀気にデプロむたでするケヌスもありたす。 どちらのケヌスがいいかは組織やプロダクトの性質ごずに異なるため、䞀抂には蚀えたせん。 しかし、デプロむの自動化を行うこずで次のようメリットを受けられたす。 バグの迅速な修正 リスクマネヌ ゞメント詳しくは埌述 倉曎に察するフィヌドバックを玠早く埗る詳しくは埌述 継続的むンティグレヌションにより、ある倉曎がテストに通らなかった堎合、その倉曎に問題があったこずが瞬時に分かるようになりたす。 蚀い返せば、テストをすべおパスした倉曎はリリヌスしおも安党だずいうこずが分かりたす。 この時泚意したいのは、すべおのシナリオに察しおテストがあるわけではないですし、仕様バグなどはCI/CDを䜿っおも取り陀くこずはできたせん。 その他の䜜業の自動化 コヌドの コンパむル 、静的解析、䟝存関係のアップデヌトはもちろん、CI/CDを䜿うこずで、さたざたなこずを自動化できたす。 最近のCI/CDサヌビスやツヌルはずおも柔軟に䜜られおいるので、ほずんどの䜜業をCI/CD䞊で自動化できたす。 ※ハヌドりェアに䟝存する䜜業などはCI/CDサヌビスによっおはできない堎合もありたす。  そのため、自動化したいタスクを思い぀いたずきは、たずCI/CDを䜿えないか怜蚎しおみるずよいず思われたす。 CI/CDが走るタむミングは以䞋の通りです。 CI pull-request䜜成した時 pull-request䜜成以降にpushした時 定期実行時(cron) CD mergeした時 ブランチによっおデプロむ先を倉えられるmasterブランチぞmergeされたら本番環境、developブランチぞmergeされたら怜蚌環境など 定期実行時(cron) デプロむの自動化によるメリット リスクマネヌ ゞメント 倉曎Aず倉曎Bを個別にリリヌスする堎合ずAずBの倉曎をたずめた倉曎Cをリリヌスする堎合を考えたす。 リリヌスによっお問題が発芚した堎合、AずBは別に䜜業を行っおいるため、「倉曎Aに問題はなく倉曎Bに問題があったので、Bのみ察応を行った」ずいうようにそれぞれ個別に察応するこずが可胜です。 䞀方、倉曎CはAずBのどちらに問題が朜んでいるかの切り分けが耇雑になっおしたう可胜性ある他、倉曎範囲が倧きいため ロヌルバック が容易にできない堎合がありたす。 このように リスクマネヌ ゞメントの芳点ではAずBを別々にリリヌスするべきであるこずが賢明ずいえたす。 CI/CDによる継続的デプロむはこの リスクマネヌ ゞメントを可胜ずしたす。 継続的デプロむができるずいうこずは、倉曎の ロヌルバック も簡単にできるずいうこずであり、問題があった倉曎点を取り消しお再床デプロむをすれば、 ロヌルバック したこずになるからです。 䞊述の リスクマネヌ ゞメントの考えに乗っ取るず重芁なのは ロヌルバック できる単䜍を小さくするこずであるず蚀えたす。 継続的デプロむを甚いるこずでこの ロヌルバック できる単䜍を刻むこずができるのです。 たた、 ロヌルバック による保険があるため、開発者はより挑戊的にコヌドを曞くこずができ、開発者の仕事は劇的にやりやすくなるこずが芋蟌めたす。 デプロむの自動化によっお倉曎の粒床を小さくしおバグのリスクを䞋げるこずができれば、バグを恐れる必芁はありたせん。 フィヌドバックを玠早く埗る ナヌザが本圓に求めるプロダクトを効率的に開発するには  1. 実甚最䜎限の機胜を䜜る  2. リリヌスする  3. フィヌドバックを埗る 䞊蚘のルヌプを玠早く繰り返すこずが倧切です。 ナヌザにずっお䟡倀があるかどうかわからない時でも本番環境でテストするこずにより、フィヌドバックを玠早く埗られたす。 「本番環境でテスト」ずいう蚀葉に身のすくむ思いを抱かれるかもしれたせんが、怜蚌段階で必芁かどうかを議論するよりも、本番環境で1床リリヌスし、フィヌドバックを集めおしたったほうが効率的な堎合もありたす。 そしお、䞇が䞀䞍芁な倉曎だったずしおも継続的デプロむにより簡単に ロヌルバック ができるのです。 そのため、継続デプロむを䜿うこずで本番環境からより早くフィヌドバックを埗るこずができるようになるのです。 たずめ CI/CDを䜿うこずでさたざたな䜜業を自動化できるだけではなく、デプロむず ロヌルバック を自動化するこずでより効率的なプロダクト開発ができるようになりたす。 たた、人力で行うテストずは異なり、人間に起因するミスが起きず、品質が担保されるずいうメリットもありたす。 品質を萜ずさずに、高速な開発、リリヌスずいうサむクルを回すためには必須ず蚀えたす。 蚘事の途䞭でも觊れたしたが クラりド 型のCI/CDサヌビスである「Circle CI」では無料枠があり、個人レベルの䜿甚であれば十分に利甚できるので、興味を持たれた方はお詊しください。 参考資料 【図解】CI/CD ずは非゚ンゞニアの方向けにわかりやすく解説したす | カゎダのサヌバヌ研究宀 CI/CDの゚キスパヌトが解説CI/CDずは䜕か なぜ今、必芁ずされるのか (1/3)CodeZineコヌドゞン いたさらだけどCircleCIに入門したので分かりやすくたずめおみた - Qiita CI/CDずは | ニフクラ ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに 1. position: static の芁玠ではz-indexは効かない 2. 基本的にはHTMLの蚘述順に重なる 3. z-indexを指定した堎合は数倀の倧きいものが䞊に重なる 4. 芪子関係がある芁玠ではz-indexの数倀に関係なく芪の䞊に子が重なる 5. 芪階局のz-indexの比范が優先しお評䟡される おわりに はじめに こんにちは、フロント゚ンドチヌムの北嶋です。 今回は CSS 初孊者が぀たずきがちな、 z-index に぀いお曞きたいず思いたす。 タむトルの「z-index:0ずz-index:100ならどちらが䞊にくる」の問いですが え、普通にz-index:100じゃないのず思った方は残念ながら䞍正解です。 正解は「堎合による」なんですよね。 CSS をしっかり勉匷したこずがある方なら簡単に分かるずは思いたすが どのような堎合にz-index:0が勝぀のか どのような堎合にz-index:100が勝぀のか を正しく理解するために、z-index関連のルヌルを敎理しおいきたいず思いたす。 1. position: static の芁玠ではz-indexは効かない 前提ずしお position: static が指定されおいる芁玠では、z-indexは無効です。 position: static はデフォルトの倀なので、z-indexを有効化するためには、 CSS で芁玠に position: static 以倖を指定しおあげる必芁がありたす。 ※2以降で説明する芁玠には、すべお position: static 以倖が指定されおいるこずずしたす。 2. 基本的にはHTMLの蚘述順に重なる z-indexに数倀の指定がなかった堎合は、曞いた順に芁玠は重なっお行きたす。 z-indexの数倀が同じだった堎合も、同様の挙動を瀺したす。 See the Pen z-index_sample by hk-rks ( @hk-rks ) on CodePen . 3. z-indexを指定した堎合は数倀の倧きいものが䞊に重なる こちらは盎感的な動きですね。 z-index:100の方がz-index:0よりも数倀が倧きいので、z-index:100が䞊に重なっおきたす。 See the Pen z-index_sample_2 by hk-rks ( @hk-rks ) on CodePen . 4. 芪子関係がある芁玠ではz-indexの数倀に関係なく芪の䞊に子が重なる 䞋のコヌドでは、z-index:100の芪芁玠ず、そこに属するz-index:50ずz-index:10の子芁玠が二぀ありたす。 たず、z-index:100の芪芁玠が数倀が䞀番倧きいにも関わらず最も䞋に配眮されおいるこずが分かるず思うのですが、これは芁玠同士に芪子関係が圢成されおいるからです。 甚語ずしおはスタックコンテキストずいうのですが「芪をベヌスずしお階局が圢成され、その䞊に子芁玠集合の階局が圢成される」ずいうむメヌゞで理解しおもらえればOKです。 子芁玠同士では同じ階局なので、z-index50がz-index:10よりも倧きいので䞊に重なるずいう通垞のz-indexの動䜜を瀺しおいたすね。 See the Pen z-index_sample_1 by hk-rks ( @hk-rks ) on CodePen . 5. 芪階局のz-indexの比范が優先しお評䟡される 䞋のコヌドでは以䞋の芁玠がありたす。 z-index:100の芪芁玠ず、そこに属するz-index:10の子芁玠 z-index:0の芪芁玠ず、そこに属するz-index:20の子芁玠 泚目すべきは、子芁玠同士ではz-index:10ずz-index:20の二぀の芁玠がありたすが、z-index:10の方が䞊に来おいる点です。 こちらもスタックコンテキストの考え方を適甚すれば理解しやすいのです。 たず芪芁玠同士ではz-index:100ずz-index:0の二぀の芁玠があっお、z-index:100が䞊に来おいたすね。 この芪階局をベヌスずしお、子芁玠が䞊に乗っおいるので z-index:100の䞊に乗っおいるz-index:10 z-index:0の䞊に乗っおいるz-index:20 では前者の方が䞊に重なるずいうこずになりたす。 ぀たり、芪階局でのz-indexで負けおいたら子芁玠の方でいくらz-indexを倧きくしおも䞊に重なるこずはできないずいうこずですね。 See the Pen WNRmQyr by hk-rks ( @hk-rks ) on CodePen . おわりに ここたで理解できれば、タむトルの問いの答えが「堎合による」こずが分かっおきたのではないでしょうか 蚘事を曞いおいお、僕自身が初孊者の頃にひらすらz-indexを倧きくしおいた時期が懐かしく思い出したした笑 曎に理解を深めたい方は「スタックコンテキスト」で調べるず詳しい情報がたくさん出おきたすので、ぜひ参考にしおみお䞋さい。 それでは、ここたで読んでいただきありがずうございたした ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに 技術広報のyayawowoです。 い぀も ラク スの゚ンゞニアブログのご賌読、そしお゚ンゞニアむベントぞのご参加、ありがずうございたす。 ラク スでは、珟堎最前線の゚ンゞニア達から普段の掻動や開発・運甚で埗た知芋などの技術情報をお届けするむベント・・・ 『Meetup』 を幎に数回開催しおおりたす。 そしお、2021幎床1発目ずなる今回のMeetupも倧盛況に終わりたしたので、その䞭身に぀いおたずめさせおいただきたした はじめに むベントテヌマ抂芁 発衚の玹介 Mail Dealerにおけるむンフラ基盀の歎史ず生産性向䞊に぀いお スモヌクE2Eテストで20幎モノのシステムからバグを燻し出す方法 返したいけど返せない、倧きな技術的負債を返すために おわりに むベントテヌマ抂芁 今回は、䞖の䞭の倚くの゚ンゞニア組織が抱える 『技術的負債』 ず、チヌムの力を最倧化するための 『生産性向䞊』 をテヌマずしおおりたす。 匊瀟゚ンゞニアから、以䞋サヌビスに関わるこれたでの取り組みず今埌の展望に぀いお、ご玹介させおいただきたした メヌルディヌラヌ 楜楜販売 発衚の玹介 それではここから各発衚内容ず資料を共有させおいただきたす Mail Dealerにおけるむンフラ基盀の歎史ず生産性向䞊に぀いお 初めに、Mail Dealerのむンフラ担圓である䞭井の発衚です。 ラク スに入瀟した圓時、Mail Dealerのサヌバ台数は珟圚の半数皋床の芏暡ながら、すべお物理サヌバで運甚しおいたした。 サヌビス立ち䞊げ圓初からの機噚も手付かずな状態で、様々な問題が顕圚化しおおり、抜本的な改善が急務でした。 それから9幎が経過し、珟圚はオンプレ環境での『オヌル仮想化』を実珟するこずで、クリアずなった問題もたくさんありたすが、新たな課題も生たれおいたす。 今回の発衚では、Mail Dealerのむンフラ基盀の歎史を振り返りながら、その倉化の過皋でどのようなポむントに着目しお改善を行い、生産性向䞊に結び付けおきたかを、事䟋を螏たえおご玹介したした。 MD Infra history from motoharunakai www.slideshare.net スモヌクE2Eテストで20幎モノのシステムからバグを燻し出す方法 次は、Mail Dealerの開発担圓である桑原からのご玹介です。 Mail Dealerは玄20幎続く倧きなシステムであり、画面数も機胜数も倚いため、思いもよらない箇所でバグが発生する恐れがありたす。 そのため、品質には特に気を配る必芁がありたす。 しかし品質は䞊げたい䞀方でどの組織でもあるように、新芏開発に远われ、人ず時間が足りない状況が垞態化しおいたした。 そんなMail Dealerでは高コストな自動テストではなく、「スモヌクE2E」ずいう簡易的なE2Eテストを増産する取り組みを始めたした。 限られたリ゜ヌスの䞭でメンバヌを巻き蟌みながら品質を担保する取り組みに぀いおご玹介したした。 speakerdeck.com 返したいけど返せない、倧きな技術的負債を返すために 最埌は、リリヌス13幎目ずなる息の長いサヌビスである楜楜販売を担圓しおいる氎間の発衚です。 サヌビスが続くのは嬉しいこずですが、いわゆる技術的負債はどうしおも蓄積しお続けおしたいたす。 楜楜販売でも長い間、返したいけど返せない負債がありたしたが、その䞭の䞀郚を぀いに返枈する機䌚がありたした。 䞀般的に、負債の蓄積は避けがたいものであり、 リファクタリング 等の機䌚も限られおいるかず思いたす。 その䞭でどう返枈チャンスを䜜っおいくべきか、今回の䜓隓を振り返りさせおいただきたした。 speakerdeck.com おわりに 倧芏暡な SaaS サヌビス開発ず20幎以䞊向き合っおいる ラク スだからこその発衚はどうだったでしょうか。 ラク スの取り組みが、皆さたにずっお新しい気づきや成長に぀ながる機䌚ずなっおいたすず幞いです 今埌も ラク スMeetupでは日々の゚ンゞニアの取り組みを発信しおたいりたすので、次回もぜひご参加いただけたすず幞いです。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに こんにちは、matsutairaです。僕は普段 Atom ずいう テキスト゚ディタ を䜿甚しおおり、実甚的な プラグむン から面癜い プラグむン など必芁な プラグむン を入れお䜜業しおいたす。個人的には、実甚的な プラグむン より面癜い プラグむン を䜿うのが奜きですが、芋぀けるのも倧倉なので自分で プラグむン の䜜成ができないかず思い䜜成方法を調べおみたした。今回は調べた内容を元に プラグむン の䜜成を行いたいず思いたす。 目次 はじめに Atomずは プラグむンずは プラグむン䜜成 パッケヌゞ生成 パッケヌゞ構造 機胜䜜成 おわりに Atom ずは そもそも Atom ずは、 GitHub が開発した オヌプン゜ヌス の テキスト゚ディタ です。 メリット UIが盎芳的で䜿いやすい 無料公開の プラグむン が倚数存圚し、䜜業効率アップや息抜きになる プラグむン 同様倚数のテヌマがあり、カスタマむズ性が高い ショヌトカットが䜿いやすい デメリット 起動に倚少時間がかかる 動䜜が重い堎合がある ずはいえ オヌプン゜ヌス であるこず、か぀デメリットを補えるだけのメリットがあるため、䜿う䟡倀のある テキスト゚ディタ だず思いたす。䜿ったこずが無い方はこの機䌚に是非䜿っおみおください。 atom.io プラグむン 䜜成 本題の プラグむン の䜜成に入りたす。今回䜜成する プラグむン は「入力を怜知し䜕かをする」をコンセプトに䜜成したいず思いたす。 パッケヌゞ生成 Atom にはデフォルトでパッケヌゞゞェネレヌタずいうものが存圚しおおり、 プラグむン の䜜成に必芁なパッケヌゞの雛圢を自動で生成しおくれたす。 メニュヌバヌの[パッケヌゞ]から[パッケヌゞ ゞェネレヌタ]を遞択したす。たずは雛圢を生成しおみたしょう。 ※コマンドパレット Ctrl+Shift+P から「Package Generator: Generate Package」でも生成できたす。 保存する堎所ず名前を入力し[Enter]を抌したす。 今回は「erai- bot 」ずいう名前で䜜成したす。 生成が完了するず新芏でりィンドりが立ち䞊がりたす。 たったこれだけで プラグむン の䜜成に必芁な雛圢を簡単に䜜るこずができ、デフォルトでこの機胜が入っおいるのはかなりありがたいです。 パッケヌゞ構造 次はパッケヌゞの構造を芋おみたしょう。 erai-bot ├ keymaps │ └ erai-bot.json ├ lib │ ├ erai-bot-view.js │ └ erai-bot.js ├ menus │ └ erai-bot.json ├ spec │ ├ erai-bot-spec.js │ └ erai-bot-view-spec.js ├ styles │ └ erai-bot.less ├ .gitignore ├ CHANGELOG.md ├ LICENSE.md ├ package.json └ README.md keymaps キヌバむンド の定矩 lib機胜の定矩 menusメニュヌ衚瀺の定矩 specテスト甚フォルダ styles css やlessによるスタむルの定矩 package. json packageの定矩を蚘述 ずいうような構造になっおいたす。今回はkeymaps、libの2぀のみを線集しおいきたす。 ※自分で䜜成する プラグむン は、 C:/Users/~/github/erai-bot 配䞋に眮かれ、同時に C:/Users/~/.atom/packages 配䞋むンストヌルした プラグむン が栌玍される堎所にショヌトカットが䜜成されたす。 機胜䜜成 それでは実際に機胜を䜜成しおいきたす。 たずは䜿える AtomAPI を確認したしょう。 数ある API の䞭から今回は TextEditor ずいう API ず NotificationManager を利甚したす。 NotificationManager画面右䞊にメッセヌゞを衚瀺 TextEditor文字入力怜知や文字の自動入力、削陀、セヌブの怜知が可胜 この2぀の API を基本に䜜成したす。 たずは、生成したたたの プラグむン を起動しおみたす。デフォルトでは Ctrl+Alt+O がショヌトカットになりたす。 このたたでは、 プラグむン を起動/停止したずきに毎回衚瀺されおしたいたすし、ON/OFF状態がわかりずらいので右䞊にメッセヌゞを衚瀺しおみたす。 以䞋のように erai-bot.js を線集したす。 toggle() { atom.notifications.addInfo( 'ON/OFF' ); // ↓䜿甚しないのでコメントアりトor削陀 // console.log('EraiBot was toggled!'); // return ( // this.modalPanel.isVisible() ? // this.modalPanel.hide() : // this.modalPanel.show() // ); } atom .notifications.addInfoを䜿うこずで画面右䞊にメッセヌゞを衚瀺できたす。 nofiticationsの皮類は、 * Success * Info * Worning * Error * FatalError の5皮類あり、それぞれ皮類によっお色やアむコンが倉わりたす。optionでアむコンを蚭定するこずも可胜です。 線集した箇所の反映は Ctrl+S だけではできないので、保存ずりィンドりをリロヌド Ctrl+Shift+F5 をしたす。 もう䞀床 プラグむン を起動させおみたす。 画面右䞊にメッセヌゞが衚瀺されるようになりたした。しかしこのたただず プラグむン の起動/停止をするごずにメッセヌゞが衚瀺されるので、ただ起動状態かがわかりたせん。さらに蚘述しおいきたす。 toggle() { this .active = ! this .active; if ( this .active) { return this .disable(); } else { return this .enable(); } // atom.notifications.addInfo('ON/OFF'); } , enable() { atom.notifications.addInfo( 'えらいbot起動' ); } , disable() { atom.notifications.addInfo( 'えらいbot停止' ); } 新たにenable関数ずdisable関数を远加したした。これにより プラグむン が起動しおいる状態からは停止→disable関数呌び出し、 プラグむン が停止しおいる状態からは起動→enable関数呌び出しに遷移するこずが可胜ずなりたした。 次は文字を入力するだけで耒められるようにしたす。 たず、activate関数郚分を線集したす。ここには プラグむン の読み蟌み時にロヌドされる内容を蚘述したす。 activate(state) { this .eraiBotView = new EraiBotView(state.eraiBotViewState); this .modalPanel = atom.workspace.addModalPanel( { item: this .eraiBotView.getElement(), visible: false } ); // 入力怜知甚 this .editor = atom.workspace.getActiveTextEditor(); this .editorChangeSubscription = this .editor.getBuffer().onDidChange( this .onChange.bind( this )); // Events subscribed to in atom's system can be easily cleaned up with a CompositeDisposable this .subscriptions = new CompositeDisposable(); // Register command that toggles this view this .subscriptions.add(atom.commands.add( 'atom-workspace' , { 'erai-bot:toggle' : () => this .toggle() } )); } , 次は、enable関数ずdisable関数を線集したす。 enable() { // 起動時に有効化 this .editorChangeSubscription = this .editor.getBuffer().onDidChange( this .onChange.bind( this )); atom.notifications.addInfo( 'えらいbot起動' ); } , disable() { // disposeで入力怜知を停止 this .editorChangeSubscription.dispose(); atom.notifications.addInfo( 'えらいbot停止' ); } , 次は、onChange関数を䜜成したす。 onChange(input) { atom.notifications.addInfo( '入力できおえらい' ); } 入力するたびに「入力できおえらい」ず耒められるようになりたした。 プラグむン の起動䞭ぱディタ䞊に倉化がある床にメッセヌゞが衚瀺されるので、EnterやSpaceの入力でも耒められたす。 たた、 onChange(input) { if (input.newText === " \n " ) { atom.notifications.addInfo( 'Enter抌せおえらい' ); } } のようにするこずで、Enterの入力のみを怜知するこずも可胜です。 ただし、゚ディタ䞊ぞ入力したもののみ怜知できるので、CtrlやShitfは怜知できないので泚意が必芁です。 最埌に保存するたびに耒められるようにしたす。 たず、activate関数郚分を線集したす。 activate(state) { this .eraiBotView = new EraiBotView(state.eraiBotViewState); this .modalPanel = atom.workspace.addModalPanel( { item: this .eraiBotView.getElement(), visible: false } ); // 入力怜知甚 this .editor = atom.workspace.getActiveTextEditor(); this .editorChangeSubscription = this .editor.getBuffer().onDidChange( this .onChange.bind( this )); // 保存怜知甚 this .editorSaveSubscription = this .editor.getBuffer().onDidSave( this .onSave.bind( this )); // Events subscribed to in atom's system can be easily cleaned up with a CompositeDisposable this .subscriptions = new CompositeDisposable(); // Register command that toggles this view this .subscriptions.add(atom.commands.add( 'atom-workspace' , { 'erai-bot:toggle' : () => this .toggle() } )); } , 次は、enable関数ずdisable関数を線集したす。 enable() { // 起動時に有効化 this .editorChangeSubscription = this .editor.getBuffer().onDidChange( this .onChange.bind( this )); this .editorSaveSubscription = this .editor.getBuffer().onDidSave( this .onSave.bind( this )); atom.notifications.addInfo( 'えらいbot起動' ); } , disable() { // disposeで入力怜知を停止 this .editorChangeSubscription.dispose(); this .editorSaveSubscription.dispose(); atom.notifications.addInfo( 'えらいbot停止' ); } , 最埌にonSave関数を䜜成したす。 onSave() { atom.notifications.addSuccess( '保存できおえらい' ); } プラグむン の起動䞭は保存をするたびに「保存できおえらい」ず耒められるようになりたした。 最埌にショヌトカットキヌを倉えたす。倉曎は keymaps にある erai-bot.json を線集したす。 { " atom-workspace ": { " ctrl-alt-q ": " erai-bot:toggle " } } これで Ctrl+Alt+Q で プラグむン の起動/停止ができるようになりたした。 䞀通りの動䜜はこれで完了ですが、若干物足りないのでさらに機胜を远加したしょう。 䞀定時間入力がない堎合にメッセヌゞを衚瀺する蚭定を入れたす。 var timeoutId; // äž­ç•¥ onChange(input) { // タむマヌ停止 clearTimeout(timeoutId); atom.notifications.addInfo( '入力できおえらい' ); this .startTimer(); } , // äž­ç•¥ disable() { // タむマヌ停止 clearTimeout(timeoutId); // disposeで入力怜知を停止 this .editorChangeSubscription.dispose(); this .editorSaveSubscription.dispose(); atom.notifications.addInfo( 'えらいbot停止' ); } , // äž­ç•¥ startTimer() { // 60秒埌にメッセヌゞを衚瀺 timeoutId = setTimeout(() => { atom.notifications.addError( '䌑憩できおえらい' ); } , 60000); } 某倪陜神の名蚀を衚瀺し぀぀、 プラグむン の起動状態を匷制的に維持する蚭定を入れたす。 var count = 0; // äž­ç•¥ disable() { if (count < 1) { // アクティブ状態に匷制移行 this .active = ! this .active; count = count + 1; atom.notifications.addError( '諊めんなよ' ); atom.notifications.addError( '諊めんなよ、お前' ); atom.notifications.addError( 'どうしおそこでやめるんだ、そこで' ); atom.notifications.addError( 'もう少し頑匵っおみろよ' ); atom.notifications.addError( 'ダメダメダメ諊めたら' ); atom.notifications.addError( '呚りのこず思えよ、応揎しおる人たちのこず思っおみろっお' ); atom.notifications.addError( 'あずもうちょっずのずころなんだから' ); atom.notifications.addError( '俺だっおこのマむナス10床のずころ、しじみがトゥルルっお頑匵っおんだよ' ); atom.notifications.addError( 'ずっずやっおみろ必ず目暙を達成できる' ); atom.notifications.addError( 'だからこそNever Give Up' ); } else { // タむマヌ停止 clearTimeout(timeoutId); count = 0; // disposeで入力怜知を停止 this .editorChangeSubscription.dispose(); this .editorSaveSubscription.dispose(); atom.notifications.addInfo( 'えらいbot停止' ); } } , 䜕秒埌にメッセヌゞを衚瀺するかずオン状態の維持回数をナヌザが蚭定できるようにしたす。 config: { "TimeSetting" : { "type" : "integer" , "default" : 60, "description" : "最終入力時間から䜕秒経過埌にコメントを衚瀺するか" } , "CountSetting" : { "type" : "integer" , "default" : 1, "description" : "匷制的に機胜ON状態を継続する回数" } } , // äž­ç•¥ disable() { if (count < (atom.config.get(`erai-bot.CountSetting`))) { // アクティブ状態に匷制移行 this .active = ! this .active; count = count + 1; atom.notifications.addError( '諊めんなよ' ); atom.notifications.addError( '諊めんなよ、お前' ); atom.notifications.addError( 'どうしおそこでやめるんだ、そこで' ); atom.notifications.addError( 'もう少し頑匵っおみろよ' ); atom.notifications.addError( 'ダメダメダメ諊めたら' ); atom.notifications.addError( '呚りのこず思えよ、応揎しおる人たちのこず思っおみろっお' ); atom.notifications.addError( 'あずもうちょっずのずころなんだから' ); atom.notifications.addError( '俺だっおこのマむナス10床のずころ、しじみがトゥルルっお頑匵っおんだよ' ); atom.notifications.addError( 'ずっずやっおみろ必ず目暙を達成できる' ); atom.notifications.addError( 'だからこそNever Give Up' ); } else { // タむマヌ停止 clearTimeout(timeoutId); count = 0; // disposeで入力怜知を停止 this .editorChangeSubscription.dispose(); this .editorSaveSubscription.dispose(); atom.notifications.addInfo( 'えらいbot停止' ); } } , // äž­ç•¥ startTimer() { // ナヌザ蚭定から秒数を取埗 var time = atom.config.get(`erai-bot.TimeSetting`); timeoutId = setTimeout(() => { atom.notifications.addWarning( '䌑憩できおえらい' ); } , time * 1000); } 以䞊で プラグむン は完成です。 プラグむン のコヌドは以䞋に蚘茉したすので、気になった方はこちらを参考に プラグむン の䜜成に圹立おおみおください。 'use babel' ; import EraiBotView from './erai-bot-view' ; import { CompositeDisposable } from 'atom' ; // グロヌバル倉数 var timeoutId; var count = 0; export default { // ナヌザ蚭定甚 config: { "TimeSetting" : { "type" : "integer" , "default" : 60, "description" : "最終入力時間から䜕秒経過埌にコメントを衚瀺するか" } , "CountSetting" : { "type" : "integer" , "default" : 1, "description" : "匷制的に機胜ON状態を継続する回数" } } , eraiBotView: null , modalPanel: null , subscriptions: null , activate(state) { this .eraiBotView = new EraiBotView(state.eraiBotViewState); this .modalPanel = atom.workspace.addModalPanel( { item: this .eraiBotView.getElement(), visible: false } ); // 入力怜知甚 this .editor = atom.workspace.getActiveTextEditor(); this .editorChangeSubscription = this .editor.getBuffer().onDidChange( this .onChange.bind( this )); // 保存怜知甚 this .editorSaveSubscription = this .editor.getBuffer().onDidSave( this .onSave.bind( this )); // Events subscribed to in atom's system can be easily cleaned up with a CompositeDisposable this .subscriptions = new CompositeDisposable(); // Register command that toggles this view this .subscriptions.add(atom.commands.add( 'atom-workspace' , { 'erai-bot:toggle' : () => this .toggle() } )); } , deactivate() { this .modalPanel.destroy(); this .subscriptions.dispose(); this .eraiBotView.destroy(); } , serialize() { return { eraiBotViewState: this .eraiBotView.serialize() } ; } , toggle() { this .active = ! this .active; if ( this .active) { return this .disable(); } else { return this .enable(); } } , enable() { // 起動時に有効化 this .editorChangeSubscription = this .editor.getBuffer().onDidChange( this .onChange.bind( this )); this .editorSaveSubscription = this .editor.getBuffer().onDidSave( this .onSave.bind( this )); atom.notifications.addInfo( 'えらいbot起動' ); } , disable() { if (count < (atom.config.get(`erai-bot.CountSetting`))) { // アクティブ状態に匷制移行 this .active = ! this .active; count = count + 1; atom.notifications.addError( '諊めんなよ' ); atom.notifications.addError( '諊めんなよ、お前' ); atom.notifications.addError( 'どうしおそこでやめるんだ、そこで' ); atom.notifications.addError( 'もう少し頑匵っおみろよ' ); atom.notifications.addError( 'ダメダメダメ諊めたら' ); atom.notifications.addError( '呚りのこず思えよ、応揎しおる人たちのこず思っおみろっお' ); atom.notifications.addError( 'あずもうちょっずのずころなんだから' ); atom.notifications.addError( '俺だっおこのマむナス10床のずころ、しじみがトゥルルっお頑匵っおんだよ' ); atom.notifications.addError( 'ずっずやっおみろ必ず目暙を達成できる' ); atom.notifications.addError( 'だからこそNever Give Up' ); } else { // タむマヌ停止 clearTimeout(timeoutId); count = 0; // disposeで入力怜知を停止 this .editorChangeSubscription.dispose(); this .editorSaveSubscription.dispose(); atom.notifications.addInfo( 'えらいbot停止' ); } } , onChange(input) { // タむマヌ停止 clearTimeout(timeoutId); atom.notifications.addInfo( '入力できおえらい' ); // タむマヌ開始 this .startTimer(); } , onSave() { atom.notifications.addSuccess( '保存できおえらい' ); } , startTimer() { // ナヌザ蚭定から秒数を取埗 var time = atom.config.get(`erai-bot.TimeSetting`); // タむマヌのIDを取埗し぀぀タむマヌ開始 timeoutId = setTimeout(() => { atom.notifications.addWarning( '䌑憩できおえらい' ); } , time * 1000); } } ; おわりに プラグむン の䜜成はそこたで難しいこずはなく、 JavaScript の知識さえあれば簡単に䜜成できたした。僕自身 JavaScript の知識はほが皆無なので、この皋床の プラグむン しか䜜成できたせんでしたが、少しの知識でも プラグむン を䜜成するこずができたした。個人的には、アニメヌションや音等が出るような面癜い プラグむン を䜜成したかったですが、できるこずはできたかなず思いたす。 プラグむン の䜜成自䜓、詊行錯誀を重ねながらだったため、新鮮で勉匷にもなりたした。より勉匷を重ねお自分の玍埗する プラグむン を䜜成できればず思いたす。 皆さんも Atom で自分だけのオリゞナル プラグむン を䜜成しおみおはいかがでしょうか。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに 技術広報のyayawowoです。 皆さんは、業務䞭に Excel ゚クセルを利甚される機䌚が倚いのではないでしょうか。 Excel ゚クセルには䟿利な関数がずおも倚くありたす。 今回は、 Excel 初心者向けにビゞネスシヌンで倚く利甚されおいる Excel ゚クセルの䞭でも、 IF関数 に特化し、䜿い方をたずめたした。 基本的な䜿い方ずなりたすので、 Excel ゚クセル初心者の方だけでなく、埩習をしたい方のご参考になれば幞いです。 はじめに Excel゚クセルのIF関数ずは Excel゚クセルのIF関数 - 䜿い方入門線- 䟋題 実践 IF関数ず論理匏 Excel゚クセルのIF関数 - 䜿い方応甚線- IF関数ず耇数条件 䟋題 実践 Excel゚クセルのIF関数ずAND関数・OR関数 IF関数ずAND関数 䟋題 実践 IF関数ずOR関数 䟋題 実践 IF関数ず空癜空欄 䟋題 実践 IF関数ずVLOOKUP関数 䟋題 実践 たずめ Excel ゚クセルのIF関数ずは たず初めに、 Excel ゚クセルのIF関数ずはどのようなこずができるでしょうか。 簡単にいいたすず  IF関数ずは 「蚭定した条件によっお、指定された倀を返す関数」 のこず Excel ゚クセルのIF関数に぀いお、数匏を利甚した簡単な解説は以䞋のようになりたす。 = IF( ① ●●が▲▲だったら【条件】 , ② 蚭定した倀を衚瀺【条件䞀臎】, ③ 蚭定した倀を衚瀺【条件䞍䞀臎】 ) ①条件を指定する ②条件に䞀臎する堎合、衚瀺したい倀を指定 ③条件に䞀臎しない堎合、衚瀺したい倀を指定 では、むメヌゞが぀いたずころでIF関数の䜿い方に入っおいきたす。 たずは、入門線からです。 Excel ゚クセルのIF関数 - 䜿い方入門線- 入堎料の蚈算を䟋題にしおいきたいず思いたす。 䟋題 入堎料が以䞋条件の動物園がありたす。 20歳未満の入堎料1,000円 20歳以䞊の入堎料2,000円 ある旅行䌚瀟では、動物園の入堎料をたずめるために名簿を䜜成したした。 各々の入堎料がいくらになるか Excel ゚クセルの IF関数 を掻甚しお算出しおみたしょう 赀枠箇所の条件を、 以䞋の通りにすれば良いこずがわかりたす。 = IF( ① 幎霢が20歳以䞊だったら【条件】 , ② 2,000円を衚瀺【条件䞀臎】, ③ 1,000円を衚瀺【条件䞍䞀臎】 ) この匏を䜿っお、 Excel ゚クセルのIF関数の䜿い方を解説したす。 実践 1. 蚭定した条件に合わせお、 Excel ゚クセルで衚を䜜成したす。 2.、 Excel ゚クセルで 䜜成した衚のセルに匏を入力したす。 D6 に =IF( ず入力 Excel ゚クセルが自動で候補の関数を =IF(論理匏,[真の堎合],[停の堎合]) に匏を入力 論理匏・・・【条件】 幎霢が20歳以䞊だったら C6>=20 幎霢 C6 20歳以䞊 >=20 真の堎合・・・【条件䞀臎】 2,000円を衚瀺 $C$3 2,000円を手入力しおも良いが、汎甚的に利甚したいため C3 を指定する オヌトフィルでコピヌをした際、セルがずれないように絶察参照 $ で固定する 停の堎合・・【条件䞍䞀臎】 1,000円を衚瀺 $C$2 1,000円を手入力しおも良いが、汎甚的に利甚したいため C2 を指定する オヌトフィルでコピヌをした際、セルがずれないように絶察参照 $ で固定する ◆匏 =IF(C6>=20,$C$3,$C$2) が完成◆ 3. オヌトフィル 1 で匏をコピヌしたす。 D6 に入力した匏を D7 、 D8 にもコピヌしたいですよね。 そのようなずきにオヌトフィルを利甚したす。 D6 セルの右䞋にカヌ゜ルをあおる 十字のようなマヌクがでたしたら、クリックしたたた䞋に匕っ匵る D7 、 D8 に匏がコピヌされ、条件通りの倀が衚瀺される 20歳以䞊である ラク ス花子さんず花芋 ラク 子さんの入堎料が「2,000円」であるこずがわかりたす。 Excel ゚クセルのIF関数は芚えおしたえばずおも䟿利な機胜です。 様々な堎面で掻甚できるよう、この機䌚にしっかりず芚えおしたうこずをお勧めしたす。 IF関数ず論理匏 Excel ゚クセルのIF関数で入力する論理匏ですが、 「どのような匏にすればいいの」 「この条件の時、蚘号は䜕を䜿えば・・・」 ず、迷われる方もいるかず思いたす。 以䞋の通り、少し簡単にたずめたしたので、ご参考いただけたすず幞いです。 条件 匏 C6>20 C6デヌタ幎霢が20歳より倧きい C6>=20 C6デヌタ幎霢が20歳以䞊 C6<20 C6デヌタ幎霢が20歳より小さい未満 C6<=20 C6デヌタ幎霢が20歳以䞋 C6=20 C6デヌタ幎霢が20歳ず等しい同じ C6<>20 C6デヌタが20歳ず等しくない異なる Excel ゚クセルのIF関数 - 䜿い方応甚線- Excel ゚クセルのIF関数は、耇数の条件を組み合わせお利甚するこずも可胜です。 ここからは応甚的な䜿い方に぀いお解説をしおいきたいず思いたす。 IF関数ず耇数条件 応甚線では、入門線で扱った䟋題を再床利甚したす。 䟋題 以䞋の通り入堎料の条件を倉曎したした。 入門線では、「20歳以䞊」ずいう1぀の条件で事足りたしたが、そこに以䞋のような「20歳以䞊40歳未満」ず「40歳以䞊」の条件が加わった堎合はどのようにIF関数の匏を䜜成すれば良いでしょうか。 20歳以䞊の入堎料1,000円 20歳以䞊40歳未満の入堎料2,000円 40歳以䞊の入堎料1,500円 では、耇数条件を䜿った Excel ゚クセルのIF関数に぀いお説明しおいきたす。 実践 1. Excel ゚クセルで䜜成した衚のセルに匏を入力したす。 =IF(論理匏,[真の堎合],[停の堎合]) の通り、匏を埋めおいく 論理匏・・・【条件】 20歳未満だったら C7<20 真の堎合・・・【条件䞀臎】 1,000円を衚瀺 $C$ 停の堎合・・【条件䞍䞀臎】 次の条件IF関数を远加・・・ (IF(論理匏,[真の堎合],[停の堎合])) 論理匏・・・【条件】 40歳以䞊だったら C7>=40 真の堎合・・・【条件䞀臎】 1,500円を衚瀺 $C$4 停の堎合・・【条件䞍䞀臎】 2,000円を衚瀺 $C$3 ◆匏 =IF(C7<20,$C$2,IF(C7>=40,$C$4,$C$3)) が完成◆ 2. オヌトフィルで匏をコピヌしたす。 D7 の匏をオヌトフィルを利甚しお D8D10 にコピヌしたす。 D7 セルの右䞋にカヌ゜ルをあおる 十字のようなマヌクがでたしたら、クリックしたたた䞋に匕っ匵る D8 、 D9 、 D10 に匏がコピヌされ、条件通りの倀が衚瀺される 45歳である楜楜次郎さんの入堎料が1,500円であるこずがわかりたす。 たた、25歳の ラク ス花子さんず20歳の花芋 ラク 子さんの入堎料は2,000円ず正しく算出できおいたす。 このように、条件が耇数ずなった堎合でも、 Excel ゚クセルのIF関数を利甚しお簡単に蚈算するこずができたすね Excel ゚クセルのIF関数ずAND関数・OR関数 Excel ゚クセルのIF関数ではさらに、より耇雑な凊理ができたす。 次はIF関数ず「AND関数か぀」ず「OR関数たたは」の䜿い方に぀いお説明したす。 IF関数ずAND関数 䟋題 以䞋条件の詊隓を䟋題にAND関数の䜿い方を説明したす。 80歳以䞊合栌 80歳未満䞍合栌 実践 1. Excel ゚クセルで䜜成した衚のセルに匏を入力したす。 =IF(論理匏,[真の堎合],[停の堎合]) の通り、匏を埋めおいく 論理匏・・・【条件】 午前詊隓が80点以䞊か぀、午埌詊隓が80点以䞊だったら (C6>=80,D6>=80) 真の堎合・・・【条件䞀臎】 合栌を衚瀺 $C$2 停の堎合・・【条件䞍䞀臎】 䞍合栌を衚瀺 $C$3 ◆匏 `IF(AND(C6>=80,D6>=80),$C$2,$C$3) が完成◆ 2. オヌトフィルで匏をコピヌしたす。 E6 の匏をオヌトフィルを利甚しお E7E9 にコピヌしたす。 E6 セルの右䞋にカヌ゜ルをあおる 十字のようなマヌクがでたしたら、クリックしたたた䞋に匕っ匵る E7 、 E8 、 E9 に匏がコピヌされ、条件通りの倀が衚瀺される 今回甚意した䟋題は、「午前詊隓が80点以䞊か぀AND、午埌詊隓が80点以䞊」の人だけが合栌ずなりたす。 衚から読み解く通り、合栌者は ラク ス倪郎さんだけであるこずがわかりたす。 合吊刀定も正しくされおいたすね。 IF関数ずOR関数 䟋題 次は、以䞋条件の詊隓を䟋題に、OR関数の䜿い方を説明したす。 80歳以䞊合栌 80歳未満䞍合栌 実践 1. Excel ゚クセルで䜜成した衚のセルに匏を入力したす。 =IF(論理匏,[真の堎合],[停の堎合]) の通り、匏を埋めおいく 論理匏・・・【条件】 午前詊隓が80点以䞊たたは、午埌詊隓が80点以䞊だったら OR(C6>=80,D6,>=80) 真の堎合・・・【条件䞀臎】 合栌を衚瀺 $C$2 停の堎合・・【条件䞍䞀臎】 そうでなければ、䞍合栌を衚瀺 $C$3 ◆匏 =IF(OR(C6>=80,D6>=80),$C$2,$C$3) が完成◆ 2. オヌトフィルで匏をコピヌしたす。 E6 の匏をオヌトフィルを利甚しお E7E9 にコピヌしたす。 E6 セルの右䞋にカヌ゜ルをあおる 十字のようなマヌクがでたしたら、クリックしたたた䞋に匕っ匵る E7 、 E8 、 E9 に匏がコピヌされ、条件通りの倀が衚瀺される OR関数の䟋題は、「午前詊隓が80点以䞊たたは、午埌詊隓が80点以䞊」の人だけが合栌ずなりたす。 午前・午埌詊隓の䞡方ずも80点以䞊がないのは楜楜次郎さんだけですので、IF関数の匏が間違っおいないこずが確認できたした。 IF関数ず空癜空欄 䟋題 䟋題ずしおあげおいた合吊刀定ですが、もし合栌の人だけを知りたい詊隓があったずしたす。 受隓者が少ない詊隓でしたら、今たで通り合栌・䞍合栌の衚瀺をしおも良いず思うのですが、人数が倚い堎合はどうでしょうか。 以䞋のように衚瀺しおしたうず少し芋にくくなりたすよね。 Excel ゚クセルのIF関数では、空癜空欄を指定するこずもできたすので、次はその説明をしたいず思いたす。 実践 1. Excel ゚クセルで䜜成した衚のセルに匏を入力したす。 =IF(論理匏,[真の堎合],[停の堎合]) の通り、匏を埋めおいく 論理匏・・・【条件】 点数が80点以䞊だったら C6>=80 真の堎合・・・【条件䞀臎】 合栌を衚瀺 $C$2 停の堎合・・【条件䞍䞀臎】 空癜空欄を衚瀺 "" ◆匏 =IF(C6>=80,$C$2,"") が完成◆ 2. オヌトフィルで匏をコピヌしたす。 D6 の匏をオヌトフィルを利甚しお D7D16 にコピヌしたす。 D6 セルの右䞋にカヌ゜ルをあおる 十字のようなマヌクがでたしたら、クリックしたたた䞋に匕っ匵る D7D16 に匏がコピヌされ、条件通りの倀が衚瀺される どうでしょうか。 合栌の人だけをすぐに芋぀けられる衚になりたした。 このように、IF関数で空癜空欄を衚瀺する匏を䜜るこずができたす。 ちなみにですが、以䞋の通り論理匏に空癜空欄を指定するこずもできたす。 =IF(論理匏,[真の堎合],[停の堎合]) の通り、匏を埋めおいく 論理匏・・・【条件】 点数が空癜空欄だったら C6="" 真の堎合・・・【条件䞀臎】 䞍合栌を衚瀺 $C$3* 停の堎合・・【条件䞍䞀臎】 合栌を衚瀺 $C$2 ◆匏 =IF(C6="",$C$3,$C$2)</span></b> が完成◆ IF関数ずVLOOKUP関数 最埌は Excel ゚クセルのIF関数ずVLOOKUP関数を組み合わせた応甚的な䜿い方を説明したす。 たず、VLOOKUP関数を初めお聞く方もいるかず思いたすので、簡単にたずめるず以䞋になりたす。 今回は Excel ゚クセルのIF関数に぀いおの説明を䞭心にしおいたすので、VLOOKUP関数の䜿い方は別でご確認いただけたすず幞いです。 = VLOOKUP( ① 怜玢したい倀を蚭定【怜玢倀】 , ② 怜玢する範囲を蚭定【範囲】, ③ 蚭定した範囲の列番号を蚭定【列番号】, ④ 怜玢する際の型を蚭定【怜玢の型】 ) では、早速䟋題にう぀りたす。 䟋題 以䞋条件に応じお、 E6 セルに入力した人の合吊刀定を行う衚を䜜成する。 80歳以䞊合栌 80歳未満䞍合栌 実践 1. たずVLOOKUP関数で名前に玐づいた点数を怜玢したす。 「=VLOOKUP 怜玢倀,範囲,列番号,[怜玢の型] 」の通り、匏を埋めおいく 怜玢倀 怜玢したい名前 ラク ス倪郎を指定 E6 範囲 点数衚の範囲から怜玢する B6:C9 列番号 怜玢倀があれば、指定した範囲の巊から2列目の点数を返す 2 怜玢の型 ただし、怜玢倀は完党䞀臎で返す FALSE ◆匏 =VLOOKUP(E6,B6:C9,2,FALSE) が完成◆ 以䞋の通り、名前に玐づいた点数を返すこずができたしたので、この結果に応じお合吊刀定もしおいきたいず思いたす。 2. Excel ゚クセルのIF関数を利甚しお合吊刀定を行いたす。 =IF論理匏,[真の堎合],[停の堎合]) の通り、匏を埋めおいく 論理匏・・・【条件】 もし怜玢した点数が80点以䞊だったら VLOOKUP(E6,B6:C9,2,FALSE)>=80 真の堎合・・・【条件䞀臎】 合栌を衚瀺 $C$2 停の堎合・・【条件䞍䞀臎】 䞍合栌を衚瀺 $C$3 ◆匏 =IF(VLOOKUP(E6,B6:C9,2,FALSE)>=80,$C$2,C3) が完成◆ たずめ 今回は Excel ゚クセルのIF関数の入門的な内容から、少し応甚的なものたでご玹介したした。 Excel ゚クセルは私だけでなく、皆さんが業務を行う䞊でも利甚機䌚が倚いツヌルでもあるかず思いたす。 最近は、 Google の スプレッドシヌト を利甚する方も倚いず思いたすので次はその内容に぀いおたずめおおりたす。 ブログ Google スプレッドシヌト 䜿い方 【たずめ】 最埌にはなりたすが、本内容が1぀でも皆様のお圹に立おおいれば幞いです Excel ゚クセルのIF関数に぀いおは以䞊ずなりたすが、最埌に宣䌝をさせおください ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com 長々ず倱瀌したした。 今埌ずも、 ラク スを宜しくお願い臎したす。 衚䞭のある項目セルに特定の倀を入力しお遞択状態にし、そのたたマりスなどのドラッグ操䜜で瞊あるいは暪に遞択領域を広げおいくず、新たに遞択された項目に次々に連続した倀が入力されおいく。 ↩
はじめに こんにちは、楜楜粟算の開発に携わっおいるHiroto-Kitamuraです。 皆さたは、開発にどのような環境( IDE 、゚ディタ)を䜿甚しおいるでしょうか Eclipse に VSCode 、 Emacs に Vim など 個々の䜿い方によっお遞択肢は倚いですよね。 本蚘事では、私が職堎や家でむンストヌルしお䜿甚しおいる IDE の IntelliJ を玹介したす。 IntelliJ は機胜をフルに䜿おうずするず有料ですが、私はそれに芋合う䟡倀があるず考えおいたす。 むンストヌルから日本語化などの簡単な䜿い方たで解説しおいるので、気になった方はぜひ最埌たでお読みください。 はじめに IntelliJずは 有料版ず無料版に぀いお むンストヌル手順 Toolboxのむンストヌル IDEのむンストヌル 初期蚭定 日本語化・プラグむン導入の䜿い方 ラむセンス賌入 IntelliJの䜿い方 プロゞェクト䜜成・プログラム実行 䟿利なショヌトカット Git連携の䜿い方 リポゞトリ䜜成 commit, pushなどの䜿い方 switch, mergeなどの䜿い方 Git Bash埋め蟌み デヌタベヌス連携の䜿い方 デヌタベヌス接続 デヌタベヌス操䜜 たずめ IntelliJ ずは IntelliJ (正確には IntelliJ IDEA)は チェコ の JetBrains 瀟が開発しおいる 統合開発環境 ( IDE )の䞀぀で、 䞻に JVM 蚀語( Java , Kotlin, Scala など)及びHTML/ CSS や JavaScript 等フロント゚ンドで䜿われる蚀語、 SQL をサポヌトしおいたす。 JetBrains瀟は IntelliJ 以倖にも Python や C蚀語 など䜿い方の異なる各蚀語に察応した IDE をそれぞれリリヌスしおおり、 これらの IDE ず豊富な プラグむン をむンストヌルしおフルに䜿甚するこずであらゆる蚀語での開発ができるようになっおいたす。 IDE 名 䞻なサポヌト蚀語 AppCode Objective-C , Swift CLion C, C++ DataGrip SQL 専甚 GoLand Go IntelliJ IDEA Java , Kotlin, Scala , Groovy PhpStorm PHP PyCharm Python Rider C# , .NET Framework RubyMine Ruby WebStorm web専甚(HTML, JavaScript など) 有料版ず無料版に぀いお IntelliJ には有料版のUltimateず無料版のCommunity Editionが存圚し、䜿い方によっおどちらかをむンストヌルしたす。 無料版は他の倚くの環境ず同じく料金がかかりたせんが、フロント゚ンドや SQL 、Webフレヌムワヌクのサポヌトがないため、本栌的な開発には向きたせん。 有料版は個人利甚で1幎17,200円(初幎床・蚘事䜜成珟圚)ず決しお安くない䟡栌ですので、導入を迷っおいる方はたず、無料版をむンストヌルしお詊しおみるのも良いでしょう。 たた、有料版にも1ヶ月の詊甚期間がありたすので、そちらを詊すのも䞀぀の手です。 ちなみに、 IntelliJ Ultimateを含めたJetBrains補 IDE が党郚入りになっおいるAll Products Packずいうものも存圚したす。 個別に買い揃えるよりかなり安くなっおいるので、色々な蚀語を䜿いたい方はこちらを賌入するのが良いでしょう。 むンストヌル手順 Toolboxのむンストヌル IntelliJ のむンストヌルには、公匏サむトから盎接 IntelliJ の むンストヌラ をダりンロヌドする方法ず、JetBrainsの各 IDE をたずめお管理できる Toolbox App からむンストヌルする方法がありたす。 どちらがよいかは各々のPCの䜿い方等によっお倉わっおくるず思いたすが、本蚘事では IDE のバヌゞョンの管理が簡単で耇数の IDE の管理にも䟿利なToolboxからのむンストヌル方法を解説したす。 たず、 こちら からToolboxの公匏ペヌゞにアクセスし、OSに合わせた拡匵子を遞択しおダりンロヌドをクリックしおください。 次に、ダりンロヌドした むンストヌラ を開き、指瀺に埓っおむンストヌルを行いたしょう。 むンストヌルが完了したら、タスクバヌ右偎の通知領域にToolboxアむコンが衚瀺されおいるかず思いたす( Windows の堎合)。 これをクリックするこずで、Toolboxを起動するこずができたす。 衚瀺されおいない堎合はスタヌトメニュヌなどから怜玢しお起動すればOKです。 IDE のむンストヌル Toolboxのむンストヌルが終わったら、前項の方法で起動したしょう。 Toolsタブに衚瀺されおいる IntelliJ IDEA UltimateかCommunity Editionのどちらかを遞択し、むンストヌルをクリックしおください。 私は既に IntelliJ をむンストヌルしおいるので画像では衚瀺が異なっおいたすが、本来は他の IDE ず同様の衚瀺になりたす。 むンストヌルが完了したら、Toolsタブ䞊郚・Installed項に衚瀺された IntelliJ をクリックし、起動するこずができたす。 初期蚭定 IntelliJ のむンストヌル埌初回起動時には、初期蚭定を行う必芁がありたす。 ※私は既に IntelliJ でこの初期蚭定を完了しおしたっおいるので、以降の䞀郚画像は別のJetBrains補 IDE であるPyCharm, RubyMineをむンストヌルした時のものになりたす。 やるこずは IntelliJ ずほが倉わりたせん。 起動するずたず蚭定ファむルをむンポヌトするか聞かれるので、他の人や前のPCから蚭定ファむルを持っお来おいる人はそのファむルを遞択したしょう。 ない人はDo not import settingsを遞べばOKです。 次にラむセンスの蚭定です(有料版のみ)。 30日間の無料詊甚期間があり、Evaluate for free→Evaluateを抌すず詊甚するこずができたす。 埌述するラむセンス賌入を行っおいる方は、Activate→JB AccountでJetBrainsアカりントのログむン情報を入力するか、Activation codeからラむセンスコヌドを入力しおください。 最埌にWelcome画面が開きたすので、カラヌテヌマやフォントサむズ、 プラグむン 等の蚭定を行っお最初のプロゞェクトを䜜成すれば初期蚭定完了ずなりたす(これらは埌からでも蚭定できたす)。 IntelliJ の画面衚瀺をできるだけ日本語にしたいずいう方は、ここで次項の日本語化 プラグむン をむンストヌルするのがよいでしょう。 日本語化・ プラグむン 導入の䜿い方 むンストヌル盎埌の IntelliJ は衚蚘がすべお英語になっおいたす。 私はこのたた䜿っおいるのですが、日本語化したい方も倚いのではないでしょうか。 本項では IntelliJ の日本語化の方法ずその他 プラグむン のむンストヌル方法を説明したす。 先皋のWelcome画面でPluginsタブを開き、怜玢窓にjapaneseず打ち蟌みたしょう。 するず「Japanese Language Pack / 日本語蚀語パック」ずいう プラグむン が出おくるので、むンストヌルボタンを抌したす。 他に䜿い方に合わせお入れたい プラグむン があれば同様にむンストヌルすればOKです。 むンストヌル完了埌画面の指瀺に埓っおRestart IDE から IntelliJ を再起動するず、衚蚘がある皋床日本語になりたした。 完成されたプロゞェクトではないので、英語のたた残っおいるずころも倚々ありたす。 プラグむン は IntelliJ のむンストヌル盎埌だけでなくプロゞェクトを䜜った埌でも蚭定画面で入れるこずができたすし、䞀床入れた埌無効化するこずもできたす。 この堎合は画面䞊郚の ツヌルバヌ 、File>Settings>Pluginsから蚭定を行いたしょう。 たずは英語で詊しおみお、読みづらいので日本語にしお、でもやっぱり英語に戻しお ずいう䜿い方も可胜です。 この蚘事では以降日本語化しおいない環境を前提に説明を進めおいきたすが、䜿い方は倉わらないので、日本語化をした方は適宜翻蚳しながら読み進めおください。 ラむセンス賌入 有料版の䜿甚には、ラむセンス賌入が必芁ずなりたす。 日本の代理店から賌入する方法もありたすが、ここではJetBrainsから盎接賌入する方法を玹介したす。 たずは、 JetBrains公匏サむト から右䞊のストアをクリックしおください。 IntelliJ のみ䜿甚する堎合は IntelliJ IDEA Ultimate、他の党 IDE も䜿いたい堎合はAll Products Packの賌入ボタンをクリックし、先に進みたしょう。 あずは画面の指瀺に埓っお情報を入力し、クレゞットカヌドや デビットカヌド で支払いを行えば、賌入完了です。 この過皋でJetBrainsアカりントを䜜成するこずになるず思いたす。 Toolboxを開いお右䞊の歯車アむコンから蚭定画面に進み、アカりント情報を入力しおログむンしおおくこずでラむセンスを有効化するこずができたす。 先述した IDE のむンストヌル埌初期蚭定でも有効化できたすが、こちらで蚭定しおおくず IntelliJ 以倖の IDE をむンストヌルする際にも毎回いちいちアカりント情報を入力する必芁がありたせん。 All Products Packを賌入した方にはこちらの蚭定方法がおすすめです。 IntelliJ の䜿い方 ここからは、プログラム䜜成からGitやデヌタベヌスの連携たで、 IntelliJ の基本的な䜿い方・䟿利機胜に぀いお説明したす。 プロゞェクト䜜成・プログラム実行 IntelliJ のむンストヌルが終わったら、実際にプロゞェクトを䜜っおコヌドを曞いおみたしょう。 むンストヌル盎埌の堎合はWelcome画面のProjects>New Project、 既に䜕らかのプロゞェクトを開いおいる堎合は䞊郚 ツヌルバヌ のFile>New>Projectから新芏プロゞェクト䜜成画面に入っおください。 䜜るプロゞェクトの皮類を画面巊から遞択できたすが、今回は基本的な Java プロゞェクトを䜜るこずにしたす。 開発を行うには、 SDK ( JDK 、 Java 開発に必芁なツヌルキット)を遞択する必芁がありたす。 既に䜿いたいバヌゞョンの JDK がPCにある人は衚瀺された候補の䞭から遞ぶか、Add JDK から JDK のフォルダを遞択しおください。 JDK がない、そもそも JDK っお䜕ずいう方はDownload JDK から䜿いたい Java バヌゞョンを遞んでむンストヌルしたしょう。 バヌゞョンがわからなければ11あたりでいいず思いたす。 次にテンプレヌトを遞ぶ画面に移りたす。 チェックを入れるず初期パッケヌゞずMainクラスずmainメ゜ッドが䜜られるので、入れおおきたしょう。 最埌にプロゞェクト名(ず初期パッケヌゞ)を決めおFinishを抌せば、プロゞェクトが䜜成されたす。 プロゞェクトの画面は䞋画像のようになっおいお、巊偎にファむル管理、右偎にコヌド、䞋に実行結果他もろもろが衚瀺されおいたす。 蚘事内で字が芋えづらくならないようにりむンドりを瞮小しおいたす。普段のコヌド画面はもっず広いです コヌドを曞いおいるず自動補完が働きたす。 デフォルト蚭定では特別なショヌトカットを抌さなくずも、入力するず勝手に補完が出おきたす。 䜿い方によるず思いたすがずおも䟿利です。 倧文字小文字の区別をなくすには、File>SettingsのEditor>General>Code CompletionからMatch caseのチェックを倖しおください。 コヌドの実行は画面右䞊などに衚瀺されおいる右䞉角ボタンで実行できたす。 衚瀺がない堎合はmain関数の䞊で右クリックしおRun Mainを実行すればOKです。 新しくパッケヌゞやクラスなどを䜜る際は巊偎のフォルダを右クリック>New(たたは遞んだ状態でalt+insert)で䜜成したしょう。 このあたりの䜿い方は Eclipse 等の IDE ずほが倉わらないず思いたすが、 IntelliJ ではデフォルトでコヌドを自動保存しおくれる点が倧きく異なりたす。 䟿利なショヌトカット IntelliJ には、䟿利なショヌトカットが倚数存圚したす。 党ショヌトカットの䞀芧は他サむトに譲りたすが、ここでは私が普段重宝しおいるものを玹介しようず思いたす。 ショヌトカット 操䜜 Ctrl+Space 自動補完 Ctrl+Alt+L コヌドの自動敎圢 Shift+F6 名称倉曎 Ctrl+クリック 倉数やクラスの宣蚀堎所・䜿甚堎所にゞャンプ Ctrl+D 行の耇補 Ctrl+Y 行の削陀(最初に䜿甚した際 Redo ず遞択) F2 ゚ラヌや譊告の堎所にゞャンブ Alt+Enter ゚ラヌや譊告の修正候補を衚瀺 Shift2回抌し クラス・倉数・テヌブル・蚭定項目など䜕でも怜玢 Ctrl+Shift+F 党ファむル内から grep 怜玢 Alt+Insert ファむル䜜成・コンスト ラク タ/getter/setter/toString等の远加 Ctrl+/ 遞択行の コメントアりト ※ショヌトカットはすべお Windows 版です Eclipse などの今䜿っおいる環境ず、コマンドや䜿い方が党然違うず思う方もいらっしゃるず思いたす。 こちらに慣れるのもいいですし、File>Settings>Keymapからお䜿いの環境颚に䞀括で倉えたり、1぀ず぀ショヌトカットを自分流にアレンゞする䜿い方もできたすよ。 Git連携の䜿い方 IntelliJ では䜜ったプロゞェクトをGitず連携させるず、 GUI でcommitやpush、switchなどを行ったり、ブランチのコミットグラフを図で確認するこずができるようになりたす。本項では、このGit連携の基本的な䜿い方を玹介したす。 これらはコマンドで行うこずももちろんできたすが、ブランチが倚くおごちゃごちゃしおいる堎合や、コマンドを叩くより GUI 䞊で操䜜したい方におすすめです。 リポゞトリ 䜜成 新しくプロゞェクトを䜜った堎合は、画面䞊郚の ツヌルバヌ から VCS >Enable Version Control Integrationをクリックしおください。 䜿う バヌゞョン管理システム の遞択肢が出おくるのでGitを遞んでOKを抌すず、ロヌカル リポゞトリ が䜜成されたす。 既に GitHub などにあるプロゞェクトをcloneする堎合は、䞊郚 ツヌルバヌ でFile>New>Project from Version ControlよりURLの入力や GitHub アカりントぞのログむンをするこずでcloneできたす。 commit, pushなどの䜿い方 ロヌカル リポゞトリ を䜜ったら、実際にcommitなどの操䜜を行っおみたしょう。 Gitの操䜜は䞻に画面右䞊ず画面䞋郚のGitタブ>Logタブ(画像で赀枠で囲たれた郚分)で行いたす。 commitやpushpull、 ロヌルバック は画面右䞊のボタンで行いたす。 commitはチェックボタンです。 差分を芋比べながらcommitするファむルを遞択する、コミット前に自動敎圢をする、ずいった䜿い方ができるので倧倉䟿利です。 ちなみに、差分があるファむルはcommit画面を開かなくおもファむルりむンドりや゚ディタ画面で青く衚瀺されおいたす。 pushは右䞊向き矢印ボタンで行えたすが、 GitHub などのリモヌ トリポゞ トリが必芁なので、cloneやgit remoteなどで蚭定しおいない堎合はpush>Define remoteからリモヌ トリポゞ トリを蚭定したしょう。 pullは巊䞋向き矢印(Update Project), 未コミット郚分の ロヌルバック はU字矢印ボタンで行うこずができたす。 switch, mergeなどの䜿い方 ブランチ関連の操䜜は画面䞋郚Gitタブで行いたす。 珟圚のブランチ名は垞に画面右䞋に衚瀺されおいたす(前項の図参照)。 既存のブランチぞのswitchはブランチを右クリック>Checkoutで、新ブランチの䜜成は掟生元のブランチを右クリック>New Branch from Selectedから行いたしょう。 簡単な操䜜は右䞋のブランチ名クリックから行うこずもできたす。 mergeはマヌゞ先のブランチにcheckoutした埌、マヌゞ元のブランチ右クリック>Merge into Currentから行えたす。 ここで玹介した䜿い方以倖にも、様々なGit操䜜が可胜です。 Git Bash 埋め蟌み 前章ではGitの GUI 操䜜の䜿い方に぀いお説明したしたが、コマンドで操䜜を行うGit Bash を IntelliJ に埋め蟌むこずも可胜です。 これを䜿えば、Gitコマンドを䜿うのにいちいち IntelliJ からりむンドりを切り替える必芁がありたせん。 本項で玹介する方法は Windows 甚のものずなりたすが、他のOSでも䌌たような䜿い方でgitが䜿える端末が埋め蟌めるず思いたす。 ※Git Bash がPCに入っおいない堎合は、 IntelliJ ぞの埋め蟌みの前にGit Bash をむンストヌルしおおいおください。 こちら からむンストヌルできたす。 たず、䞊郚 ツヌルバヌ のFile>Settingsから蚭定メニュヌを開き、Tools>Terminalを開きたしょう。 そしおShell Pathの欄にGit Bash のむンストヌル ディレクト リのbin\ bash .exeのパスを入力するず(C:\Program Files\Gitあたりにあるず思いたす) 、 IntelliJ 画面䞋郚のTerminalタブでGit Bash を開くこずができたす。 この状態でGit Bash は䜿えるのですが、このたただずgit logなどで衚瀺される日本語が正垞に衚瀺されず、Gitの䜿い方によっおはずおも䞍䟿です。 これを解消するためには、Git Bash の蚭定を倉曎する必芁がありたす。 たずGit Bash を IntelliJ ずは別りむンドりで開き、次の2぀のコマンドを実行しおください。 $ cd $ vi .bashrc vim が開くので、iボタンで挿入モヌドに移行した埌 export LANG='ja_JP. UTF-8 ' ず曞き蟌み、 Escキヌで ノヌマルモヌド に移行しお:wqず入力しお保存したす。 その埌コマンドで $ source .bashrc を実行した埌、 IntelliJ のタヌミナルを開き盎す(Localの暪の×ボタンで閉じた埌再びTerminalタブを開く)ず日本語が衚瀺されおいるはずです。 デヌタベヌス連携の䜿い方 IntelliJ Ultimateをはじめずする有料版JetBrains IDE では、Gitず同じようにデヌタベヌスも GUI から操䜜したり、コン゜ヌルを IDE 内で䜿甚するこずができたす。 Webアプリなどデヌタベヌスを掻甚するアプリケヌションを開発する際、テヌブルの䜜成やデヌタの挿入などが IDE 内で簡単に行えるため䟿利です。 本項では、このデヌタベヌス連携の䜿い方を玹介したす。 ※Git Bash ず同じくこちらも予め DBMS をむンストヌルする必芁があるので、PCに入っおいない方はこの項を読む前に䜕らかの DBMS のむンストヌルをしおおいおください。 DBMS のむンストヌル方法や䜿い方は割愛したすが、䟋えば PostgreSQL であれば こちら からむンストヌルできたす。 デヌタベヌス接続 たず、画面右端に衚瀺されおいるDatabaseをクリックしおください。 ない堎合は画面端のどこかにあるず思いたす(無料版にはありたせん)。 デヌタベヌスのツヌルりむンドりが開くので、+ボタン>Data Sourceから、お䜿いの DBMS を遞択したしょう。 あずは画面の指瀺に埓っお JDBC ドラむバのむンストヌルや認蚌情報の入力を行えば、デヌタベヌスに接続できたす。 認蚌方法など詳しい䜿い方は DBMS によっお異なるので、本蚘事では玹介したせん。各 DBMS の仕様に埓っおください。 デヌタベヌス操䜜 デヌタベヌスに接続するず、 SQL を打ち蟌めるコン゜ヌルが開きたす。 䜿い方は抂ね他の゚ディタや コマンドラむン ず同じですが、曞いおある文の䞭で䞀郚のみ実行ずいったこずもできるので、長い SQL を䞀床にコピヌしおきお少しず぀実行ずいうこずも可胜です。 コヌドの゚ディタず同じくこちらでも匷力な補完が自動で働くため、手動で SQL を入力する䜿い方の堎合は非垞に䟿利です。 私が普段䜿っおいる PostgreSQL の堎合、接続するデヌタベヌスや スキヌマ をコン゜ヌル右䞊から蚭定できるので、接続するデヌタベヌス クラスタ が同じならいちいちコン゜ヌルを開き盎したりSET search_pathを入力する必芁もありたせん。 なお、コン゜ヌルを閉じおしたった堎合には、デヌタベヌスツヌルりむンドり䞊郚の SQL ボタンを抌すず再床開くこずができたす。 IntelliJ では、簡単な䜿い方で GUI でデヌタベヌスを操䜜するこずも可胜です。 デヌタベヌスツヌルりむンドりにはデヌタベヌスが ディレクト リ構造で衚瀺されおいるので、 右クリックからテヌブル䜜成・削陀、 DDL 倉曎(Modify Table)などを簡単に行うこずができたす。 たた、テヌブルをダブルクリックするずそのテヌブルに入っおいるデヌタが衚瀺されたすが、 これはただSELECT文の結果が芋られるだけではありたせん。 画面䞊郚の+-ボタンで行の远加・削陀(INSERT・DELETE)ができる他、フィヌルド(マス)をダブルクリックすれば内容の倉曎(UPDATE)も可胜です。 実際のデヌタベヌスぞの反映はDB↑ボタンを抌しおから行われるので、間違っお行を消しおもボタンを抌さなければ問題ありたせん。 耇雑な操䜜には向きたせんが、簡易的なデヌタの挿入・修正が盎感的に行えるのは䟿利ですね。 たずめ 本蚘事では IntelliJ のむンストヌル方法・基本的な䜿い方・䟿利な機胜に぀いお玹介しおきたした。 ここで玹介したのは IntelliJ の機胜のごく䞀郚であり、ただただ色々な䜿い方が存圚したす。 私も䜿い始めお1幎も経っおいないので、倚くの機胜を知らないたた䜿っおきおいるず思いたす。 ただ、「こういう機胜あったら䟿利だな」ず思っお怜玢するず倧䜓䜕かしらあるので、 開発時、環境に起因するストレスを感じるこずはほずんどありたせん。 個々人の䜿い方によっお合う環境は倉わっおくるず思いたすが、 倚少お金をかけおでも快適に開発が行いたいずいう方は、 䞀床 IntelliJ やJetBrains補 IDE をむンストヌルしお詊甚しおみるのも良いのではないでしょうか。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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本䜓の゜ヌスコヌドを読んでみる たずめ はじめに こんにちは。開発゚ンゞニアのシカタです。 今回は PHP の暙準関数の読み方に぀いお玹介したす。 こんな経隓をしたこずはありたせんか PHP のバヌゞョンアップで挙動が倉わった 関数が想定倖の倀を返しおきた 想定倖の挙動をしおいる  リファレンスに曞かれおいないけど、この匕数っお䜿える  こういうずきに、 PHP 本䜓のコヌドがどう実装されおいるのか読むこずができればスッキリしそうですよね。 今回、 PHP 本䜓の ゜ヌスコヌド を読む方法に぀いお、具䜓䟋を亀えお玹介したす。 PHP の ゜ヌスコヌド に぀いお PHP の ゜ヌスコヌド 自䜓は C蚀語 で実装されおいたす。 C蚀語 ず聞くだけでハヌドルが高く感じるかもしれたせんが、暙準関数のコヌドを読んでみる皋床であれば意倖ず雰囲気で読めたす。 C蚀語 の基本的な文法が分かる、雰囲気で䞊から䞋ぞ ゜ヌスコヌド が読むこずができれば十分です。 暙準関数の ゜ヌスコヌド を読むコツ キヌワヌドは「 PHP _FUNCTION(関数名)」 雰囲気で理解する ある皋床玍埗したらやめおおく、適床に远いかける PHP 本䜓のコア郚分は远わない 以䞊を抑えおおけば雰囲気で読むこずができたす。 PHP 本䜓の ゜ヌスコヌド を読んでみる 今回はsleep関数のコヌドを䟋に远っおみたす。 sleep ( int $seconds ) : int https://www.php.net/manual/ja/function.sleep.php この関数の匕数が0だったずき、どんな挙動になるのか気にしながら芋おいきたいず思いたす。 たずは ゜ヌスコヌド を入手 php -srcを䞋蚘から入手したす https://github.com/php/php-src git環境があるならclone、 ゜ヌスコヌド を読みたいだけなのでzipで入手しおも良いず思いたす。 入手した ゜ヌスコヌド を開く 芏暡のある ゜ヌスコヌド なので、 ゜ヌスコヌド 党䜓を怜玢しやすい゚ディタ、 IDE がオススメです。 今回は VSCode を䜿いたす。 「File > Open Folder」で php -srcを開きたす。 関数の定矩を探す PHP の暙準関数は「 PHP _FUNCTIONfunction_name)」で定矩されおいたす。 PHP では、独自の関数マクロを䜜成するこずができたすが、 こちらでも関数は「 PHP _FUNCTIONfunction_name)」で定矩するものだず説明されおいたす。 関数の定矩方法を詳しく知りたい堎合には参考になりたす。 http://php.adamharvey.name/manual/ja/internals2.funcs.php 今回はsleep関数を远っおみるので、 php -srcの䞭で「 PHP _FUNCTION(sleep)」で怜玢をしおみたす。 䞋蚘のようにすぐ芋぀かりたす。 関数の䞭身を読んで芋る 䞊から芋おいきたす。 たず、「ZEND_XXXX」が出おきたすが、ここは PHP のコアなずころです。 PHP の 構文解析 や実行゚ンゞンを担っおいるコアなずころは「Zend Engine」ず蚀われおいたす。 PHP の ゜ヌスコヌド 内で出おくる「zend」はコアなずころに繋がるず思っお良いず思いたす。 そのため、雰囲気で読むだけあればここを远う必芁はありたせん。 ちなみに、ここは「PARSE」や「PARAMETERS、PARAM」ず名前が付いたものが呌ばれおいるぐらいなので 匕数を解析しおいるぐらいの理解で倧䞈倫だず思いたす。 その次は、匕数が負の倀だった堎合は、゚ラヌ凊理をしおいたす。 最埌に、「 php _sleep」ずいうマクロが呌ばれおたす。 ここを远っおいきたす。 関数定矩を远っおいく 「 php _sleep」の定矩を探しおみたす。 ぀のマクロ定矩が芋぀かりたすが、よくよく芋るず windows ずそれ以倖みたいな分岐がありたす。 実行環境が windows ず Unix 系で違うんだ ぐらいの理解で倧䞈倫です。 windows の堎合は、さらに「SleepEx」が呌ばれおいるので、さらに深远いしたしょう。 もう䞀方は、「sleep」なので、ここで C蚀語 のsleepを叩いおいるようです。 さらに深远い① windows の堎合の挙動を远う ここたでず同様に「SleepEx」の定矩を探しおみたす。 しかし、先ほどのマクロ定矩のずころでしか匕っかかりたせん。 PHP 内の定矩されおいない堎合は、ラむブラリたたは C蚀語 で定矩されたものである可胜性が高いです。 あずは適圓にググっおみたす。 するず、SleepExはWin32APIで定矩されおいる関数みたいです。 https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-sleepex windows の堎合の挙動なので玍埗できたす。 0秒の堎合の挙動に぀いおも曞かれおいたす。 远うのはここたでにしおおきたす。 さらに深远い windows 以倖の堎合の挙動を远う C蚀語 の「sleep」たではたどり着けたしたが、そこから先は明蚘されおいたせんでした。 https://www.ibm.com/support/knowledgecenter/ja/SSLTBW_2.2.0/com.ibm.zos.v2r2.bpxbd00/rtsle.htm ここから先は C蚀語 の仕様に䟝存する郚分なので、今日はこのくらいにしおおきたしょう。 0秒を枡したずきは、最終的に C蚀語 のsleepがいい感じに0秒スリヌプしおくれる、はずです。 たずめ PHP のコアコヌドの読み方を解説しおみたした。 身近な関数の実装であれば、意倖ず雰囲気だけで読むこずはできたす。 今回玹介した手順を参考にしおいただければ、他の関数でも詊しおもらえたすので、 䞀床、普段䜿っおいる PHP の暙準関数の ゜ヌスコヌド を読んでみおはいかがでしょうか。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに 背景 Laravelのセッション管理に぀いお セッションドラむバに぀いお セッションの操䜜 セッションの共有を怜蚎しおみた LaravelでDBを䜿っおセッション管理する セッション共有の怜蚎 Laravelのカスタムセッションドラむバ たずめ はじめに こんにちは、開発゚ンゞニアのシカタです。 今回は、開発を担圓するプロダクトで アヌキテクチャ を刷新するこずになり、Laravelの怜蚎したずきのお話です。 アヌキテクチャ の刷新だけにたくさんの課題がありたしたが、その䞭でも今回はセッションのこずに぀いお曞きたす。 Laravelをやっおみようずか、既存プロダクトにLaravelを茉せおみたいなヌず思っおる人の心に刺されば幞いです。 背景 既存の運甚䞭プロダクトの䞀郚サブシステムを、新 アヌキテクチャ で構築し盎すプロゞェクトがスタヌトしたした。 䞀気にリリヌスするず圱響が倧きすぎるので、䞀郚の機胜から埐々にリリヌスしおいく方針です。 珟圚ノン フレヌムワヌク のため、せっかく新しくするなら フレヌムワヌク を採甚したい  ずいうこずで、Laravelを怜蚎しおみるこずになりたした。 既存プロダクトのノン フレヌムワヌク な䞖界ず、Laravelで新しく䜜る䞖界を共存させるこずを怜蚎する必芁があり、 フレヌムワヌク の機胜を掻甚するこずを目指しおいたすが、たくさんの課題が出おきたした。 アヌキテクチャ どうしよう  Laravelを掻かすにはどういう アヌキテクチャ で共存させるのが良いのか  既存プロダクトずLaravelでどうやっおセッション共有しよう  認蚌呚りずかどうするのが良いんだろう etc 今回は課題の䞭からセッションに぀いお取り䞊げたす。 Laravelのセッション管理に぀いお たず、Laravelの基本的なセッション管理に぀いおです。 セッションドラむバに぀いお Laravelでは、file、 cookie , DBなどでセッション情報を管理するこずができたす。 config/session.php にセッションに関する蚭定は蚘茉されおいたす。 config/session.php return [ /* |-------------------------------------------------------------------------- | Default Session Driver |-------------------------------------------------------------------------- | | This option controls the default session "driver" that will be used on | requests. By default, we will use the lightweight native driver but | you may specify any of the other wonderful drivers provided here. | | Supported: "file", "cookie", "database", "apc", | "memcached", "redis", "dynamodb", "array" | */ 'driver' = > env('SESSION_DRIVER', 'file'), : : ] セッションの操䜜 Laravelでセッションの操䜜を行うには、 Requestむンスタンス 、 sessionヘルパ 、 Sessionファサヌド を䜿う方法がありたす。 基本操䜜に倧きな違いはありたせん。 <?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Session; class HogeFunction extends Controller { /** * @param Request $request * @return Response */ public function hogee ( Request $ request ) {   /* セッションから぀デヌタを取埗する */ // Requestむンスタンス $ value = $ request -> session () -> get ( 'key' ) ; // Sessionヘルパ $ value = session ( 'key' ) ; // Sessionファサヌド $ value = Session :: get ( 'key' ) ;   /* セッションの倀をすべお取埗する */ // Requestむンスタンス $ values = $ request -> session () -> all () ; // Sessionヘルパ $ values = session () -> all () ; // Sessionファサヌド $ values = Session :: all () ;   /* セッションに倀を保存する */ // Requestむンスタンス $ request -> session () -> put ( 'key' , 'value' ) ; // Sessionヘルパ session ([ 'key' => value ]) ; // Sessionファサヌド Session :: put ( 'key' , 'value' ) ; /* セッションに倀を削陀する */ // Requestむンスタンス $ request -> session () -> forget ( 'key' ) ; // Sessionヘルパ session () -> forget ( 'key' ) ; // Sessionファサヌド Session :: forget ( 'key' ) ; /* セッション䞭に倀が存圚するこずの確認(existsはnullでもTrueを返す) */ // Requestむンスタンス $ request -> session () -> has ( 'key' ) ; $ request -> session () -> exists ( 'key' ) ; // Sessionヘルパ session () -> has ( 'key' ) ; session () -> exists ( 'key' ) ; // Sessionファサヌド Session :: has ( 'key' ) ; Session :: exists ( 'key' ) ; } } セッションの共有を怜蚎しおみた 既存プロダクトずLaravelでセッションを共有させる方法を怜蚎しおみたした。 既存プロダクトがDBでセッション管理されおいるため、今回はLaravelでもDBを甚いたセッション管理を前提に考えおいたす。 たた、既存プロダクトではセッション呚りは玔粋な PHP で実装しおいたすが、Laravelのセッション呚りは独自実装になっおいたす。 どこかで session_start(); しおおけばいい感じになるだろう、ずいうわけにはいきたせん。 この違いも少し厄介なポむントです。 LaravelでDBを䜿っおセッション管理する LaravelでDBを䜿いセッション管理する堎合は、以䞋のようなテヌブルを䜜成する必芁がありたす。 Schema::create('sessions', function ($table) { $table- > string('id')- > unique(); $table- > foreignId('user_id')- > nullable(); $table- > string('ip_address', 45)- > nullable(); $table- > text('user_agent')- > nullable(); $table- > text('payload'); $table- > integer('last_activity'); }); 以䞋のように蚭定しおおくず、セッション管理に䜿甚するテヌブルず認識されたす。 config/session.php return [ /* |-------------------------------------------------------------------------- | Default Session Driver |-------------------------------------------------------------------------- | | This option controls the default session "driver" that will be used on | requests. By default, we will use the lightweight native driver but | you may specify any of the other wonderful drivers provided here. | | Supported: "file", "cookie", "database", "apc", | "memcached", "redis", "dynamodb", "array" | */ 'driver' = > env('SESSION_DRIVER', 'database'), : : /* |-------------------------------------------------------------------------- | Session Database Table |-------------------------------------------------------------------------- | | When using the "database" session driver, you may specify the table we | should use to manage the sessions. Of course, a sensible default is | provided for you; however, you are free to change this as needed. | */ 'table' = > 'sessions', : : ] セッション共有の怜蚎 既存プロダクトで䜿甚しおいるテヌブルを䜿甚するか、Laravelに合わせたテヌブルを䜿甚するのか 他にもいく぀か遞択肢がありたした。 少なくずも、Laravelのセッション機胜を掻甚しようず思うず、 LaravelでDBを䜿っおセッション管理する際にテヌブル定矩の通り䜜成が必芁ずなるようです。 Laravelのセッションが確立するたでの独自実装を远っおみるず、以䞋にたどり付きたした。 Illuminate/Session/DatabaseSessionHandler.php ここを芋る限りは指定されおいるテヌブル定矩前提で動くような実装になっおいたす。 セッション管理のテヌブルやセッション呚りの実装が䌌おいれば移行前提で怜蚎できるかもしれたせんが、そうでなければ難しいです 。 よっお、LaravelデフォルトのDBのセッションドラむバのたたでは、既存プロダクトずのセッション共存は困難であるこずがわかりたした。 しかし、Laravelにはカスタムセッションドラむバずいう仕組みがあり独自のセッションドラむバを実装できたす。 Laravelのカスタムセッションドラむバ 以䞋のように、 SessionHandlerInterface を実装するこずで独自のセッションドラむバの䜜成が可胜です。 <?php namespace App\Extensions; class CustomSessionHandler implements \SessionHandlerInterface { // open: ファむルベヌスでなければ空でOK public function open ( $ savePath , $ sessionName ) {} // openず同様 public function close () {} // セッションの読み蟌み凊理$sessionIdに玐づくセッションデヌタの取埗 public function read ( $ sessionId ) {} // セッションの曞き蟌み凊理$sessionIdに玐づく$dataの曞き蟌み public function write ( $ sessionId , $ data ) {} // セッションの読み蟌み凊理$sessionIdに玐づくセッションデヌタの削陀 public function destroy ( $ sessionId ) {} // セッションの読み蟌み凊理$lifetimeを超えたセッションデヌタの削陀 public function gc ( $ lifetime ) {} } 次に、䜜成したカスタムセッションドラむバの登録方法に぀いおです。 Session ファサヌド の extend メ゜ッドで登録するこずができたす。 ServiveProvider の boot メ゜ッドで䞊蚘メ゜ッドを呌ぶこずでカスタムセッションドラむバの登録ができたす。 既存の AppServiceProvider たたはセッション甚に䜜成した ServiceProvider から呌び出したす。 䞋蚘は ServiceProvider から呌び出す䟋です。 <?php namespace App\Providers; use App\Extensions\CustomSessionHandler; use Illuminate\Support\Facades\Session; use Illuminate\Support\ServiceProvider; class SessionServiceProvider extends ServiceProvider { /** * 党アプリケヌションサヌビスの登録 * * @return void */ public function register () { // } /** * 党アプリケヌションサヌビスの初期起動 * * @return CustomSessionHandler */ public function boot () { Session :: extend ( 'custom' , function ( $ app ) { // Return implementation of SessionHandlerInterface... return new CustomSessionHandler; }) ; } } 最埌に、䜜成したカスタムセッションドラむバを config/session.php で蚭定するず、䜿甚できるようになりたす。 config/session.php return [ /* |-------------------------------------------------------------------------- | Default Session Driver |-------------------------------------------------------------------------- | | This option controls the default session "driver" that will be used on | requests. By default, we will use the lightweight native driver but | you may specify any of the other wonderful drivers provided here. | | Supported: "file", "cookie", "database", "apc", | "memcached", "redis", "dynamodb", "array" | */ 'driver' = > env('SESSION_DRIVER', 'custom'), : たずめ Laravelのセッションに぀いおたずめおみたした。 既存のプロダクトず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
こんにちは。゚ンゞニアのrs_shoです。 投皿は4回目になりたす。今回は 排他制埡 に぀いおお話ししようず思いたす。 はじめに 排他制埡の皮類 楜芳ロック(楜芳的排他制埡) 悲芳ロック(悲芳的排他制埡) それぞれの特城 Javaにおける排他制埡 Semaphore CountDownLatch synchronizedメ゜ッド デヌタベヌスのLOCK おわりに 参考資料 はじめに そもそも 排他制埡 ずは䜕か、ご存じでしょうか。 排他制埡 ずは、簡単に蚀うず、凊理Aをしおいる間、他の凊理は凊理Aが終わるたで埅぀、ずいう制埡のこずです。 身近な䟋えで蚀うず、共有フォルダにある Excel などを誰かが開いお線集しおいる間、 他の人は閲芧のみ可胜で線集は䞍可の状態(蚭定によっおはできたすが )のこずです。 排他制埡 の皮類 排他制埡 はただ凊理埅ちをするだけではなく、倧きく分けお2぀皮類がありたす。(厳密にはもっず现かく分かれおいるず思いたす) 楜芳ロック(楜芳的 排他制埡 ) ず 悲芳ロック(悲芳的 排他制埡 ) です。 楜芳ロック(楜芳的 排他制埡 ) 楜芳ロックは同時曎新は起こらないであろう、ずいう前提の 排他制埡 のこずです。 曎新察象のデヌタをロック(線集䞍可)するこずはせず、 曎新時に「手元のデヌタの線集開始時点の状態」ず、「曎新察象デヌタの状態」が同じかを確認しお曎新を行いたす。 誰でも線集・曎新しおいいけど、曎新時に他の人が䞊曞きしおいたら曎新できないよっおいう制埡です。 個人的には「楜芳的(前向きな考え)ずいう割には、曎新時にデヌタが吹っ飛ぶ可胜性があっお怖いな」ず思いたすね。 悲芳ロック(悲芳的 排他制埡 ) 悲芳ロックは同時曎新が起こる可胜性がある、ずいう前提の 排他制埡 のこずです。 曎新察象のデヌタをロックしお、自分の線集・曎新が終わるたで、他の人が線集できない状態にしおしたいたす。 線集䞭は芋たり、コピヌを䜜るこずはできおも、原本に手を加えるこずはできないよっおいう制埡です。 こちらの方が自分が開いおいる間は誰も曎新できないので、なんずなく安心感がありたすね。 それぞれの特城 先皋説明した楜芳ロック・悲芳ロックに぀いお、特城や違いを挙げおいこうず思いたす。 前提 楜芳ロック同時曎新は起きないであろう 悲芳ロック同時曎新が起きるかもしれない 敎合性チェック 楜芳ロックデヌタ線集終了(曎新)時 悲芳ロックデヌタ線集開始時 どの凊理に向いおいるか 楜芳ロック 同時曎新がめったに起きない凊理(単䜓で行う凊理) 䞍敎合が起きおもやり盎せる凊理 短時間で終わる凊理 悲芳ロック 同時曎新が頻繁に起こる可胜性がある凊理(分担する凊理) 䞍敎合が起きおほしくない凊理 長時間続く凊理 Java における 排他制埡 僕は業務䞭にある皮別の䞭のカテゎリ内で番号が重耇しないように実装しようず思い、 排他制埡 に぀いお調べたした。 (䟋えば、動物ずいう皮別の、哺乳類カテゎリの1象, 2むルカ  ずいった感じで、IDが重耇しないように実装したかった) 䞊蚘はシヌケンスを䜿えばいい、ず思うかもしれたせんが、カテゎリ毎にIDを1からスタヌトする堎合、 カテゎリを远加する床にシヌケンス生成が必芁になるので、あたり珟実的ではありたせん。 ですが、DB内で保持しおいるIDの最倧倀を取埗するだけでは、採番凊理が同時に行われた際に最倧倀が重耇し、結果採番されたIDが重耇しおしたいたす。 僕の個人的な解釈になりたすが、調べた䞭で 排他制埡 に䜿甚できそうな方法を軜くご玹介しようず思いたす。 (いずれどこかでより詳しく深堀りしおみたいず思いたす。) Semaphore アクセス数を制限しお、蚭定した倀を超える数の凊理が発生した堎合、凊理埅ちをさせる 通垞の 排他制埡 はSemaphoreのロックが1぀(1぀以䞊は実行させない)の状態ず同じ ロックを解攟する方法が特殊で、実装を誀るず正垞に機胜しない(凊理実行可胜数を増やし続けおしたい、意図した 排他制埡 ができない) CountDownLatch 耇数の凊理をブロック䞞ごずロックする時に有効 匕数にロック数を指定しお、凊理毎にロック数を枛算、0になったらロックを解陀する 耇数メ゜ッドにたたがっおロックしたいずきなどに有効だが、ロック数が0になったらロックが解攟されるので、匕数で枡す倀には泚意が必芁 synchronizedメ゜ッド メ゜ッドの修食子や 入れ子 で䜿甚するこずで、同時実行をブロックできる 修食子に远加する or 凊理ブロックを 入れ子 にしおくくるだけで実装できる ただし、耇数の継承先から参照されるクラスの堎合は、 むンスタンス 毎に凊理が同時実行されおしたう可胜性がある デヌタベヌスのLOCK LOCK文を実行しおテヌブルのロックを取埗、そのテヌブルにアクセスしおいる凊理があれば、解攟されるたで埅぀ デヌタ自䜓にロックがかかるので、敎合性を保ちやすい ただ、 RDBMS の皮類によっおは、SELECTなどでもロックを取埗しおしたい、 デッドロック が発生したり、勝手に トランザクション をコミットされたりしおしたうため、泚意が必芁 おわりに 以䞊、 排他制埡 に぀いおざっず説明させおいただきたした。扱いが難しいですが、䜿いこなせればデヌタの敎合性を保蚌できたす。 この蚘事を通しお 排他制埡 に぀いお知っおいただく、調べおみるきっかけになれば幞いです。 玹介した方法に぀いおも、いずれ深堀りしおいこうず思いたす。 参考資料 排他制埡楜芳ロック・悲芳ロックの基瀎 【Java】マルチスレッド凊理 - 排他制埡 Javaの排他制埡(ロック)に関係するクラスたずめ PostgreSQLは、SELECTもロックを獲埗する ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに 株匏䌚瀟 ラク ス チャットディヌラヌ開発課の゚ンゞニアRakusMoritaです。 2021幎3月26日金3月28日日開催のPHPerKaigi2021に、 ラク ス゚ンゞニア7名が参加しおきたした。 phperkaigi.jp PHPerペチパヌによるPHPerのためのこの倧芏暡むベントは、今幎はオンラむンでの開催でした。 オンラむンでありながらも、豪華な登壇者、絶えず流れるコメント、䞻催者の勉匷になるコントなどなど・・・ お祭り隒ぎのような雰囲気䌝わっおきお、ワむワむず非垞に楜しい勉匷䌚でした。 ラク スは圓むベントのスポンサヌずしお参加 させおいただいおいる他、瀟内から2名が登壇したした。 この蚘事では、PHPerKaigi2021に参加した瀟内の゚ンゞニアが、参加したセッションの内容をたずめたしたので、ご玹介したいず思いたす。 各セッションのスラむドも甚意しおおりたすので、PHPerな人、これからPHPerになる人は新たな発芋があるこず間違いなしです。 目次 はじめに 3/27土 実践ATDD 〜TDDから曎に歩みを進めた゜フトりェア開発ぞ〜 負荷詊隓の芳点から芋るGraphQLにおけるPHPのコヌドチュヌニング 目的に沿ったDocumentation as Codeをいかにしお実珟しおいくか PHPでCSVを安心しお扱うために PHPで孊ぶ、セッションの基本ず応甚 PHP8になった今の時代に、PHPの「゚ラヌ」「䟋倖」そしお「Error」をおさらいしおおこう Laravel のメヌル認蚌の内郚実装を掘り䞋げる PHPWebアプリケヌションパフォヌマンスチュヌニング PHP でもアヌキテクチャテストしたい 3/28日 そのコヌド、フレヌムワヌクの倖でも動きたすか 無駄な物をなるべく䜜らないリプレむス戊略 なるせ先生のPHP孊PHP8新機胜スペシャル 今こそ理解するDIDependency Injection プログラマ䞉倧矎埳を実珟するデプロむフロヌを目指しお PHPのDI、attributesずこれから DNSを制する者はむンタヌネットを制すDNSの䞖界/垂川@cakephper 新瀟䌚人のコヌド品質カむれン蚘録 あずがき 3/27土 実践ATDD 〜TDDから曎に歩みを進めた゜フトりェア開発ぞ〜 report by id:radiocat speakerdeck.com ATDDずはAcceptance test-driven developmentの略で、日本語にするず受け入れ テスト駆動開発 です。 アゞャむル 開発では開発芁件をナヌザヌストヌリヌずしお衚珟し、それが実珟できおいるこずを開発の完了条件ずしお受け入れテストを実斜する手法がありたすが、 それを駆動型で開発に取り入れるやり方がATDDです。登壇者の珟堎で考えられおいる、䞭心ずなる2本柱が次の内容です。 四象 限におけるQ2を匷化する 四象 限ずは技術面ずビゞネス面の2軞ず、開発チヌム支揎ず補品批評の2軞を組み合わせたもので、Q2はその䞭でビゞネス面ず開発チヌム支揎の領域です。顧客芖点の高レベルテストで自動化ず手動テストを組み合わせるずころがポむントです。 テストピラミッドを登る テストピラミッドずは ナニットテスト を土台ずしお、サヌビステスト、UIテストず䞊䜍に階局化したテストレむダヌに分類しおテストを抂念化したもので、䞊䜍のUIテストのほうが重厚化しおしたう アンチパタヌン に陥らないように必芁に応じおテストピラミッドを登っおいくこずがポむントです。 知識的情報だけでもボリュヌムたっぷりでしたが、さらに PHP で䜜られた Webサヌビス を題材ずした ケヌススタディ では、自動受け入れテストツヌルを䜿った実践䟋も玹介されおいたす。ATDDの自動化領域ず手動テストずの共存のさせ方、 ナニットテスト などのTDDの手法ずの組み合わせ方などに぀いおも語られおおり、実践に向けた応甚方法の瀺唆に富む内容でした。知識のむンプットだけでなく実践に向けたむンプットにも圹立぀ボリュヌムたっぷりなセッションだったので、今埌も資料を読み返しお珟堎で実践掻甚したい内容です。 負荷詊隓 の芳点から芋るGraphQLにおける PHP のコヌドチュヌニング report by id:Y-Kanoh speakerdeck.com API で利甚するク゚リ蚀語である GraphQL は、REST ず違い、耇数のク゚リを1床のリク ゚ス トで行うこずができたす。 そのため、耇数のク゚リ発行のために䜕床もレスポンスを埅぀必芁がなく、 レむテンシは REST ず比べお速くなる特性がありたす。 しかしこの仕組み䞊、秒間のリク ゚ス ト数䜎䞋や、短時間に凊理が集䞭しおしたいCPU負荷が高くなるこず、 重いク゚リが含たれるず党䜓のレスポンスに圱響を䞎えるこずなど、デメリットも存圚したす。 利甚時には、取埗するデヌタを絞る仕組みや、耇雑すぎるク゚リを制限する仕組み、 PHP の堎合は凊理向䞊のためのOPCache導入などを行なっお、コヌドチュヌニングを行う必芁がありたす。その詳しい勘所に぀いお説明されおいたした。 REST ずの比范を行いながらわかりやすく説明しおいただけたので、䞡者のメリットデメリットなども理解できたした。 実際䜿っおみおの勘所を説明いただけおいたので、GraphQL の導入を考えるかたはぜひ確認しおいただければず思いたす。 目的に沿ったDocumentation as Codeをいかにしお実珟しおいくか report by id:Y-Kanoh speakerdeck.com 開発者がチヌムに join し、開発を始められる状態になるたでのオヌバヘッドを削枛する方法が、システムの理解を助けるドキュメントです。 しかし、曎新挏れによる誀った理解を防ぐために、ドキュメントはメンテナンスを継続的に行わなければなりたせん。䞀方、開発ず切り離された運甚でのメンテナンスは、システムずの乖離を修正するたでの時間も長くなっおしたい、 継続的なメンテナンスも難しくなっおしたいたす。 そこで、この発衚では、システムずドキュメントをそれぞれ情報の集合ず考え、 各情報同士が玐づいおいない状態が増えるこずを「システムずドキュメントの乖離が倧きくなった」ず䜍眮付けるこずで、 この問題の解決策を探っおいたす。 その方法ずしお、PHPDocなどのように、”システムずドキュメントの間に構造化デヌタを甚意し、 その構造化デヌタをもずにドキュメントを䜜成する方法”や、OpenAPIのように “構造化デヌタを先に甚意し、 そこからシステムずドキュメントを䜜成する” 方法などが玹介されおいたした。 たた、具䜓的に察策を行うためのツヌルも玹介されおおり、 どのような仕組みで察策を行うこずができるのか想像しやすい内容でした。 ドキュメントのメンテナンス問題は私自身も思い圓たるこずが倚く、 発衚内容の前半は胞が痛い内容でした。゚ンゞニアらしく問題の本質を分析し、 仕組みでそれをカバヌするこずを考えさせられる内容でした。 PHP で CSV を安心しお扱うために report by id:tsudachantan speakerdeck.com 他サヌビスずのデヌタ連携やバルクデヌタ入出力などで䜿い勝手が良く、根匷く利甚されおいる CSV ファむル。 PHP での CSV 凊理は癖が匷く、䞀芋安党に察応できたように芋えお運甚面で深刻な問題を抱えるこずがありたす。 珟状ずその解決方法に぀いお䞁寧にお話いただきたした。 fw3/streams OSに䟝存しない安定した入出力ず、発生しおいた問題の根本解決ずしおラむブラリfw3/streamsを玹介されおいたした。 以䞋が特城です。 OSず PHP バヌゞョンの組み合わせに圱響されず動䜜する 安党か぀確実に入出力が可胜である mb_convert_encordingを䜿った文字セットの倉曎ができる 劥圓な文字セット自動怜出が行える OSに圱響されない改行コヌド出力を行える 倉換できない文字があった堎合の代替手段を蚭定できる ラむブラリの説明に沿っお様々な環境やパタヌンを網矅しお CSV の扱い方に぀いお発衚されおおり、倧倉勉匷になりたした。 PHP で孊ぶ、セッションの基本ず応甚 report by id:soachr speakerdeck.com 以䞋の章立おで発衚されおいたした。 生い立ち 技術的な仕組み 最䜎限の呚蟺知識 PHP 以前に、そもそもHTTPでセッションが䜿われるようになった背景から、珟圚どのようにセッションが䜿われおいるのかたでを玹介された䞊で、じゃあ実際に PHP はどのようにセッションを実珟しおいるのか、ずいう内容たで玹介されおいたした。 今たでふわっずしおいた PHP のセッションに぀いお理解できたした。 ログむン機構があるシステムに関わっおいる方はずりあえずこの発衚を聞けば問題ないず思うくらい、わかりやすいすっず理解できる内容でした。 新卒時代のずきにこの発衚に出䌚っおいればもっずスムヌズに理解できたのでは...ずこの発衚で初めおセッションに぀いお孊んだ方が矚たしいず思うくらいです。新卒の育成担圓をしおいる身ずしおは、ぜひ孊習カリキュラムに入れさせおいただきたいず匷く感じたした。 PHP8になった今の時代に、 PHP の「゚ラヌ」「䟋倖」そしお「Error」をおさらいしおおこう report by id:tsudachantan speakerdeck.com PHP には「゚ラヌ」を知らせる仕組みがたくさん甚意されおいたすが、それぞれの違いが答えられるでしょうか。 PHP の゚ラヌの扱いはバヌゞョンごずに進化しおおり、それが混乱する原因にもなりえたす。 ずにかく䞍甚意に\Throwable、\Errorをキャッチするこずは危ないずいうメむンの䞻匵を。 では、そもそも゚ラヌずはずいう説明からお話しされおおり、玍埗しながら敎理できたした。 ただただ PHP 歎が浅い自分や、わかっおいるけど人に説明するのは難しいずいった方にも圹に立぀内容だず思いたす。 「Throwable/Error/Exception」に぀いおの棲み分けに぀いおの認識がクリアになり、効果的な䟋倖の䜿い方に぀いお考える機䌚になりたした。 Discordのチャンネルでも様々な意芋が亀換されおおり、チヌム開発での意識のすり合わせの倧切さを感じたした。 Laravel のメヌル認蚌の内郚実装を掘り䞋げる report by id:Y-Kanoh speakerdeck.com PHP の フレヌムワヌク であるLaravelは、さたざたなロゞックが既に甚意されおおり、 メヌル認蚌の仕組みも、少しの実装を行うこずで、簡単に利甚するこずができたす。 しかし、既存のロゞックは手軜さのために、拡匵性が犠牲になっおいる郚分があり、 独自の仕組みを組み蟌みたい堎合は、内郚ロゞックを理解した䞊での改修が必芁です。 メヌル認蚌の堎合、この拡匵性を損なっおいる原因は、App User モデルの責務が倚すぎるこずです。 App User の持っおいる責務を明確化しお、それぞれの䟝存関係を理解した䞊で、 分離独立させるこずにより、拡匵性の高いロゞックに䜜り替える方法を玹介いただいおいたした。 近幎、機胜が倚くなりすぎお批刀されるこずもある Laravel ですが、内郚の䟝存関係を理解し、 責務に沿っお䜜り替えれば䞊手く付き合っおいけるこずを孊べた発衚でした。 PHPWebアプリケヌションパフォヌマンスチュヌニング report by id:soachr speakerdeck.com パフォヌマンスチュヌニングに぀いお、䜓系的にか぀具䜓的に説明されおいたした。 パフォヌマンスチュヌニングの倧原則の考え方である「掚枬するな、蚈枬せよ」を軞ずしお、どのように再珟・蚈枬・原因仮説、からの察策を取るのかを、Webアプリケヌションを実珟する ミドルりェア ごずに玹介されおいたした。 自身もパフォヌマンス・チュヌニングを業務で行っおいたのですが、ただ知らない芖点や、蚈枬時のコマンド、察策を知れおずおも勉匷になりたした。 パフォヌマンス・チュヌニングをやったこずがない人で「なにから初めお䜕をすればいいのかわからない」方にもおすすめです。 PHP でも アヌキテクチャ テストしたい report by id:radiocat speakerdeck.com 匊瀟のリヌド゚ンゞニア川䞊が アヌキテクチャ テスト に぀いお発衚したした。 コヌドレビュヌが機胜しおいる状況においおも、 アヌキテクチャ 芳点でしっかりレビュヌするのは難しく、開発初期にしっかり怜蚎しおいた蚭蚈方針がい぀のたにか泥団子状態ずいうこずも起こりえたす。 アヌキテクチャ を維持するために、クラスの䟝存関係や実装ルヌルをコヌド化しお自動テストするのが アヌキテクチャ テストです。 発衚では PHP の フレヌムワヌク である deptrac ず phpat を䜿った アヌキテクチャ テストの実䟋がデモを亀えお玹介されたした。 デモで䜿われたサンプルコヌドが以䞋で公開されおいたす。 github.com アヌキテクチャ は䞀床決めたら終わりではなく、 アヌキテクチャ テストが アヌキテクチャ を育お、進化させおいくずいう、垌望に満ちたたずめで勇気をもらえるお話でした。 3/28日 そのコヌド、 フレヌムワヌク の倖でも動きたすか report by id:Y-Kanoh speakerdeck.com アプリケヌションの長期運甚には、ビゞネスサむド芁因による仕様倉曎の他にも、 フレヌムワヌク のバヌゞョンアップ/メンテナンスの終了や、 時代の倉化によっお利甚しおいた フレヌムワヌク が陳腐化しおしたうなど、リプレヌスを求められるこずがありたす。 そのような時に、 フレヌムワヌク にガッツリ䟝存したコヌドになっおいるず、 倧半のコヌドを曞き盎す必芁が出おきおしたいたす。 この発衚では、リプレヌスやリニュヌアル時に飛型しないために、 チヌムで䜜成するコヌドを フレヌムワヌク から分離し、 環境の倉化に匷いコヌドを䜜成する䟋を玹介しおいただけたした。 発衚䞭には、実際にLaravelで実装されたコヌドを、 Symfony に移怍するサンプルコヌドを説明しおいただき、 具䜓的にどのような効果が埗られるかを䜓隓できたした。 たた、最埌におっしゃっおいた、違う フレヌムワヌク や、違う仕組み、違う蚀語など、 「バリ゚ヌション」に匷いコヌドにするこずで、結果的に保守性を向䞊させるずいう考えが、 ずおも共感できたした。 資料の䞭に ゜ヌスコヌド のリンクもあるので興味のある方は芗いおみおください。 無駄な物をなるべく䜜らないリプレむス戊略 report by id:MasaKu speakerdeck.com レガシヌ゜ヌスのリラむトに぀いおのお話でした。 リプレむス戊略は以䞋の段階で難易床が䞊がっおいきたす。 リファクタリング リプレむス リラむト リラむトずは、既存機胜を完党に䞀から曞き盎すずいう䜜業であり、この䜜業を実斜するには、そもそも なぜリラむトが必芁なのか ずいう課題を明確にしお、どのように曞き盎すかの方針を新たに決定する必芁がありたす。 リラむトを始めるには基本的なこずずしお、珟状の仕様を完党に理解する必芁がありたす。 そのための方法は コヌドリヌディング リファクタリング 蚭蚈の振り返り 実際にサヌビスを䜿っおみる などの方法を行いたす。 たた、実際のナヌザず盎接察話するこずも重芁です。 サヌビスが提䟛しおいる䟡倀はどこにあるのかを再認識するためにも、ナヌザストヌリヌを立おお、本圓にリラむトが完了するかを芋おいく必芁がありたす。 ご発衚の䞭で リファクタリングを限界たでしおも珟状の問題が解決しないず思ったらリプレむス ずいう刀断基準をご玹介いただき、ずおも理解しやすいご説明でした。 なるせ先生の PHP 孊PHP8新機胜 スペシャ ル report by id:Y-Kanoh PHP8の新機胜であるmatch匏、NullSafe 挔算子 、Attributeを、某テレビ番組颚に玹介しおいただけたした。 match匏 フォヌルスルヌbrakeがないず次の凊理を実行しおしたうがなくお事故が起きにくい マッチする条件がないず゚ラヌになるから安党 再垰 凊理で䜿いやすい コヌドの芋通しが良くなる NullSafe 挔算子 オブゞェクトがNullの堎合、指定されたメ゜ッドが実行されない 䌌たようなものでNull合䜓 挔算子 や、 ゚ルビス 挔算子 がある ゚ルビス 挔算子 の” ゚ルビス ”は、゚ルノィス プレスリヌ の髪型が語源 Attribute 蚀語ずしおサポヌトされるようになった アノテヌション 今の圢になるたで様々な議論があった アトリビュヌト を読み取っお トランザクション を匵るなどの応甚がありえる たた、新機胜を単に玹介するだけでなく、その機胜の䟿利なずころや、 ちょっずした裏話も共有しおいただけお、ドキュメントを読むだけでは埗られない内容でした。 個人的には、゚ルノィス プレスリヌ が初耳でした。 今こそ理解するDI Dependency Injection report by id:MasaKu speakerdeck.com DIに぀いお詳しく再認識させおいただけたご発衚でした。 ずいうのも、個人的にDIに぀いおいろいろず調べおいたこずがあったのですが、結局これがDIなのかな ずいったがんやりずした理解だったので、今回のご発衚を聞き、少し理解が進んだように感じたした。 DIずは保守性の高いコヌドを曞くこずを目的ずした蚭蚈原則ずパタヌンのセットであり、 疎結合 を実珟するこずを目的ずした デザむンパタヌン です。 抂念ずしおは、制埡の逆転を行い、必芁になった時だけ呌び出す、ずいう流れで倖郚からオブゞェクトを䜿甚するようにしたす。 䟋えば、メヌルを送信するメ゜ッドを䟋にするず、倖郚から該圓のメヌル送信メ゜ッドを呌び出す際、メ゜ッド内でメヌル送信オブゞェクトを生成しおしたうず、そのメ゜ッドはメ゜ッド内で生成したオブゞェクトを自由に付け替えるこずができなくなくなりたす。 怜蚌のタむミングでは、怜蚌甚のメヌルサヌバを利甚しお、本番では AWS のメヌルサヌバを利甚する、など䜿い分けをしたい堎合、そのメ゜ッド内でオブゞェクトを生成しおしたうず、コヌドを修正しなければオブゞェクトの付け替えができたせん。 こういった密結合の状態を回避するのがDIです。 なお、DIの説明がある際にDIコンテナの話も良く出おくるが フレヌムワヌク の暙準機胜ずしお搭茉されおいる堎合が倚い、DIを実珟するためにDIコンテナが必芁なわけでなく、DIを実珟しやすくするための工倫ずしお存圚しおいるものなので、DIコンテナは必須ではないようです。 たた、類䌌の デザむンパタヌン ずしお、サヌビスロケヌタヌの話もよく登堎するが、目的はDIず同じだが実珟する手段がが異なる デザむンパタヌン ずのこずです。 プログラマ 䞉倧矎埳を実珟するデプロむフロヌを目指しお rebort by id:Jazuma プログラマ䞉倧矎埳を実珟するデプロむフロヌを目指しお from 智也 鈎朚 www.slideshare.net 株匏䌚瀟 M & A Cloud 所属 @yamotuki さんによるセッションです。 「 ベンチャヌ におけるプロダクトやチヌムの成長ずデプロむフロヌ自動化」ずいうサブテヌマのもず話が進みたした。 (デプロむフロヌにおける) プログラマ の䞉倧矎埳 怠惰 同じ䜜業の繰り返しは面倒くさい →自動化したい 傲慢 デプロむ手順をミスっお゚ラヌになるのはダサい →自動化したい 短期 デプロむ䜜業に2時間もかけたくない →2秒で終われ デプロむフロヌ自動化の歎史 サヌビス開発圓初はデプロむフロヌが自動化されおいたせんでした。 開発者の人数が少ないのでやっおいる時間がない 売䞊が立っおいないので運甚フロヌ効率化よりも機胜远加優先 自動化のノりハりがない 自動化文化がない ナヌザヌアクセスが少なく、障害発生リスクがない しかし、サヌビスが軌道に乗っおくるず自動化をする理由が出おきたした。 売䞊が立った 開発者が増えお手動䜜業だずミスが起こる可胜性が倧きくなった デプロむフロヌそのものが耇雑になり手動䜜業が぀らくなる 運甚に時間を取られお機胜远加もおろそかに なによりめんどくさこずはしたくない このような経緯でデプロむフロヌ自動化が段階的に進みたした。 セッションの䞭で 「プロダクトずチヌムの成長は自動化ず密接に関係しおいる」 ず述べられおいたのが印象的でした。 ゚ンゞニアは぀い自動化それ自䜓が目的になりがちですが、チヌムやプロダクトがどのようなフェヌズにあり、どんな問題を解決するために自動化をするのかずいうこずが重芁だず思いたした。 PHP のDI、attributesずこれから rebort by id:rakusMorita speakerdeck.com DI( Dependency Injection・䟝存性の泚入)ずは、簡単に蚀うず Dependency 䜿われるオブゞェクトを Injection䜿う偎のオブゞェクトに枡す ずいうこずです。DIに぀いおは詳しく説明したせんが、 具象クラス具䜓的な実装をしおいるクラスずの凊理の結合を避けお、抜象クラスず凊理を結合させるこずで、倉曎に匷くするこずが基本的な考え方です。 泚入ずは、 むンスタンス を抜象クラスから䜜成しお動かすずいうものです。ただ具䜓的な実装ができおいなくおもダミヌの むンスタンス を䜜りやすいモックの䜜成がしやすいので、その結果、実装もそうですが、 単䜓テスト なども非垞にやりやすくもなりたす。 DIの歎史ずポむント DIは Java から始たった PHP5でクラスの機胜が匷化され、DIっぜいこずができるようになった。 近幎 PHP でもDIが暙準的な思想ずしお認知され぀぀ある型指定が圓たり前に/interfaceが䜿いやすくなった/autoloadでrequire䞍芁に等々 今たでの型指定のない PHP 的な曞き方もできたすし、いい意味で Java っぜさも取り入れた実装もできるようになっおきお、 PHP は良いずこ取りな蚀語に進化しおきたしたね。 APC やOPchaceなどによるコヌドキャッシュにより、実行速床も向䞊し、たすたすDIがやりやすくなりたした。 今時な フレヌムワヌク Laravel、 Symfony 、 CakePHP あたりはDIコンテナを持っおいるあるいは持ずうずしおいるずいうこずは、特に意識しなくおもDIを䜿えるようになっおきたず蚀えるでしょう。 PHP の動向 PSR-11ずいう むンタヌフェむス が普及 異なる フレヌムワヌク やラむブラリのを䜿っおいおも同じように呌び出せるDI甚の むンタヌフェむス が䜿えるようになりたした。 PHP -DIずいうDI甚のラむブラリの存圚 PSR-11互換。 フレヌムワヌク ず組み合わせお䜿えるので䟿利です。 @Inject アノテヌション 蚘法が廃止になっお#[Inject] アトリビュヌト になった アノテヌション は結局のずころPHPDocだったので、文字列の解析になるので重かったのが、 アトリビュヌト だず蚀語ずしおサポヌトされおいお、動䜜が栌段に速くなりたした。 Autowireずいう機胜 明瀺的にInjectの必芁がなくなり、蚭定ファむル曞かなくおも䜜れるようになりたした。 DIがシヌムレスに䜿える=意識せずずもDIのメリットを享受できるように開発できる ずいうこずですね。玠晎らしい。 DIコンテナは今埌も自然に広く䜿われおいくこずになるでしょう。 DNS を制する者はむンタヌネットを制す DNS の䞖界/垂川@cakephper report by id:MasaKu ドメむン 名ハむゞャックの恐ろしさに぀いお改めお身に染みたご発衚でした。 悪意あるナヌザが名前解決先のIPを曞き換えおしたうため、ナヌザ偎ずしおは悪意あるWebペヌゞに遷移しおしたっおいるこずを認識できたせん HTTPS にも察応させるこずができる。 たた、この問題に気づきにくくする厄介な方法ずしお、垞に悪意あるWebペヌゞに遷移させるのではなく、10人に1人だけ悪意あるペヌゞに遷移させるなどするずより気づきにくくなりたす。 過去の事象ずしお、名前解決先のIPを返す レゞストラ の 脆匱性 を突かれお情報改ざんされ、MXレコヌドが曞き換えられたせいでメヌルも乗っ取られた、ずいう事件も発生したようです。 この問題は レゞストラ 偎の問題になるため、察策のしようがないため、 改ざんを怜知したらいち早く察応するなどの運甚が必芁 ずなりたす。 たた、 DNS の歎史に぀いおもご説明がありたした。詳しい仕様に぀いおはこの堎では割愛したすが、面癜かった゚ピ゜ヌドずしお、お子さんの YouTube 閲芧時間制限のために、 DNS パケットの解析を行い、アクセス制限を远加したずいうお話がありたした。 DNS のク゚リはどのIPの利甚者が䜕時にどのアドレスの名前解決をしたか、ずいう情報が暗号化されずに送信されるため、プラむバシヌ䞊の問題もあるようです。お子さんのプラむバシヌにかかわるため、䞊蚘察策は䞭断したずのこず ODoHずいう仕組みを利甚しお DNS のメッセヌゞを暗号化する こずも珟圚提案されおいるようです。 新瀟䌚人のコヌド品質 カむれン 蚘録 rebort by id:rakusMorita speakerdeck.com ラク スの゚ンゞニアの発衚でした。 指摘が倚く、コヌド品質が良いずは蚀えない状態から、どのように品質をアップさせおきたのかの発衚でした。 チェックリストも、コミット前のコヌドの芋盎しも色々やっおみたずころ・・・ 目立った効果がありたせんでした。しかし・・・ ペアプロ / モブプロ これで、倧きく品質が向䞊したようです。 先茩゚ンゞニアの芖点や考え方がリアルタむムでわかるので、「どういうずころに気を付ければいいのか」などがわかるようになったずのこずです。 「 ペアプロ をしおもらえる環境が玠晎らしい」 ずいうコメントがたくさん流れおいたした。 もちろん、環境も倧切だず思いたすが、圌の 「思い切っお先茩゚ンゞニアに ペアプロ をお願いした」 こず。 その勇気が圌の品質向䞊に繋がった、ずおも前向きになれる発衚でした。 きっずチヌムにずっおも、長い目で芋お開発コストを抑えるこずに繋がるはずなので、 ペアプロ ・モブプロは忙しい環境こそおすすめです あずがき このPHPerKaigi2021に参加し、゚ンゞニアの生の声を聞き、色々な考え方に盎に觊れるこずで芖野が広がりたした。 ゚ンゞニアの方なら、よくググったり、曞籍を読んだりするず思うのですが、やはり 珟堎の経隓から出た䜿えるア むデア だったり、 調べたこずもない知識をむンプットできる ずいう点で、このような勉匷䌚は貎重ですね。 皆様のより良いPHPerラむフを応揎しおおりたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com