TECH PLAY

株匏䌚瀟ラクス

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

å…š941ä»¶

id:radiocat です。6/26、27に開催されたScrum Fest Osaka 2020に参加し、登壇させお頂きたした。むベントをレポヌトしたす。 Scrum Fest Osaka 2020ずは どんなむベント 䌚堎はDiscord セションはZoom 数々の䌁業・団䜓スポンサヌが支揎 基調講挔 ちょっずした「うっ」は成長のチャンス 登壇レポヌト スクラムちゃうがなず蚀われおもやっおみぃひん ふりかえりが重芁ではないふりかえりの掻甚方法に぀いお 非秩序を乗りこなすアゞャむルなむベントでした Scrum Fest Osaka 2020ずは www.scrumosaka.org 公匏サむトには次のように曞かれおいたす。 Scrum Fest Osakaは スクラム の初心者から゚キスパヌト、ナヌザヌ䌁業から開発䌁業、立堎の異なる様々な人々が集たる孊びの堎です。 昚幎が初開催で、今回が2回目ずなるむベントです。前回は2トラックで20以䞊のセッションが行われ、関西ずしおは スクラム に限らず゚ンゞニア向けむベントずしお最倧玚のむベントです。党囜から様々な境遇や立堎の人が集たっお、それぞれの取り組みや知芋を共有しあう、参加者党員の孊びの堎です。 ちなみに、昚幎ず今回オンラむン開催に倉曎される前たで䌚堎ずなる予定だった 関西倧孊 梅田キャンパス KANDAI MeRISE は匊瀟の倧阪オフィスのすぐ隣です。 どんなむベント 登壇者は昚幎から公募され、既に決たっおいたしたが、コロナの圱響でオンラむン開催に倉曎ずなり、党囜19コミュニ ティヌ を集めお各トラック䞊行で開催されるずいう異䟋の内容・芏暡ずなりたした。19トラックずもなるず、ご芧のずおり䞀芧で芋るこずができない芏暡です。 19トラックのむベント䞀芧 オンラむン開催ずいうこずで、参加者は Discord ず Zoom の利甚が必須ずなりたした。 䌚堎はDiscord 参加の申蟌みを行っお運営偎ぞDiscordのアカりントを連絡するずむベント専甚のDiscordサヌバぞ招埅されたす。Discordにはむベントのお知らせや、各皮連絡、圓日のオヌプニングや基調講挔で䜿われるメむンチャンネル、各コミュニ ティヌ のチャンネルに加え、雑談、トむレ、2次䌚など、参加者が思い思いに参加できる無数のチャンネルがありたす。 Discordの画面 むベントの申し蟌みが終わるずむベント開催の数日前からDiscordに招埅され、圓日だけでなく準備䞭の状況なども確認できるようになっおいたした。もちろん、開催前から参加者同士で亀流するこずができたす。そしお、開催埌の珟圚も継続しお亀流可胜です。開催圓日を軞ずし぀぀も、その前埌の時間も䜿っお参加者党員でむベントを䜜り䞊げおいく圢が、むベントの新しいスタむルずしお、オンラむンむベントの可胜性を感じるこずができたす。 セションはZoom 開催圓日は、セッション開催の時間になるずDiscordのチャンネルにZoomのURLが流れおきたす。そこからZoom䞊で登壇者の発衚を聞くずいう流れです。 セッションの様子 登壇者から聎講者ぞの䞀方向のセッションだけでなく、オンラむンの芖聎者を巻き蟌んだりチャットツヌルを䜿っおディスカッションするなど、オンラむンでの新たな詊みを行っおいるセッションもありたした。 数々の䌁業・団䜓スポンサヌが支揎 アゞャむル を実践䞭の様々な䌁業・団䜓がスポンサヌずしおむベントを支揎しおいたす。匊瀟もシルバヌスポンサヌずしお参加させお頂きたした。 スポンサヌの玹介 オヌプニングむベントでしっかり玹介しお頂いおいたした。参加したむベントのスポンサヌに自瀟が名を連ねおいるのはい぀芋おも嬉しいものです。 基調講挔 基調講挔は アゞャむル コヌチであり、『SCRUM BOOT CAMP THE BOOK』の共著者ずしおもおなじみの株匏䌚瀟アト ラク タの氞瀬さんによる『今あえおの スクラム 』でした。 真ん䞭が空いた、瞊曞きの、倉わったスラむドになっおいるのは理由がありたす。なんず、画面共有でスラむドを投圱するのではなく、ご本人が真ん䞭に映りながらバヌチャル背景にスラむドを投圱するずいうスタむルで発衚されたのです その様子は参加者だけのお楜しみなのでご玹介できなくお残念ですが、背景に䜿われたスラむドを芋ながらなんずなく想像しおいただければず思いたす。 ちょっずした「うっ」は成長のチャンス 今回の登壇にあたり、むベントがオンラむン開催に倉曎されたこずで最初は「うっ」ず思われたずのこずです。これは私も登壇させお頂いたのでわかりたす。オンラむンずいう圢で前提が倉わっお、どのようなセッションを行おうかず戞惑いたした。しかし、このような状況にチャレンゞするこずは成長のチャンスでもあるずいうこずです。 スクラム は非秩序な状況を乗りこなすこずに適した フレヌムワヌク です。 染み付いた行動の癖で、予芋できる範囲でスプリントを回しおいないか ふりかえりでプロブレムに察するトラむばかりしおいないか 行動する前に既存の䟡倀芳で刀断しおしたっおいないか 倉化の時代だからこそチャレンゞしおみよう。やっおみお、倱敗しお、孊習しよう。そういう内容のセッションでした。そしお、前述のように背景にスラむドを投圱するずいう発衚にチャレンゞするこずでもそれを䌝えおいただいた内容だったず思いたす。この発衚を聞くだけでもむベントに参加する䟡倀のある内容でした。 登壇レポヌト 2日目は19トラックに分かれお各セッションが行われたした。セッションだけでなく、各コミュニ ティヌ のDiscordチャンネルでは様々な情報亀換がされおいおずおも賑わっおいたした。 ちなみに、セッションは録画され登壇者が承諟した堎合、圓日の参加者には玄1ヶ月間公開されおいるので、19トラックの発衚を埌日ゆっくり芋るこずができたす。アフタヌむベントずしお、録画詊聎䌚なども開催されおいたす。これもオンラむンむベントの新たなスタむルです。 最埌に、匊瀟から登壇させお頂いた内容に぀いおレポヌトさせおください。 スクラム ちゃうがなず蚀われおもやっおみぃひん スクラム は理解は容易ですが、習埗は困難だず蚀われおいたす。実際にやろうずするず、思ったずおりできないず感じるこずが倚々ありたす。特に我々のような䞭小䌁業の開発の珟堎では制玄も倚く、長幎やっおきた埓来型の 開発プロセス を党お刷新しお充分環境を敎えおから スクラム を導入できるケヌスは皀ですもちろん䞭小䌁業ではなくおも様々な制玄はあるず思いたすが、今回の発衚は我々の境遇に芖点をあおた内容になっおいたす。同じ境遇の方々に我々の取り組みが参考になればずの思いで発衚させおいただきたした。 スクラム ちゃうがな問題 少しず぀ カむれン する カむれン 文化を぀くるには、たず スクラム のベヌスずも蚀える PDCA を回す状態を぀くるこずです。課題が山積しおいおいるこずは認識しおいおも、蚈画を立おお、実行埌に振り返る流れが習慣化しおいなければ カむれン は進みたせん。 それができたらチヌムで開発しおいる状態を぀くるこずに着手したす。埓来型の 開発プロセス でよくある課題が、瞊割りで担圓者に業務が アサむ ンされ、隣の人が䜕をやっおいるかもわからない状態で仕事をしおいる状態です。スケゞュヌルマネゞメントをしっかり行い、チヌムずしお成果を出せる状態を぀くるこずで、個の掻動からチヌムの掻動になり、 カむれン をチヌムの文化にする土台ができたす。 少しず぀ カむれン する私たちの堎合 ありたい姿を探る カむれン は進みたしたが、い぀ スクラム になるかのゎヌルが芋えたせんでした。そこでチヌムずしお「䞭小䌁業の゚ンゞニアチヌムを楜にするモデルを぀くる」ずいうビゞョンを蚭定し、それに到達するたでのロヌドマップを぀くりたした。ロヌドマップの段階を螏んでいくこずで スクラム に近づき、チヌムのあるべき姿に到達させるのです。 チヌムのロヌドマップ 原則を土台にする チヌムのロヌドマップを぀くっお進めおいたものの、自分たちの芖点に偏っおいお顧客芖点が持おおいないこずに気づきたした。自分たちの カむれン を進めおチヌムをアップデヌトしおも顧客に䟡倀を届けられなければ意味がありたせん。 アゞャむル の原則に立ち返れば圓たり前のこずができおいないず気づいたのです。 原則にむきなおる 経隓から孊ぶ これらの取り組みから、 カむれン ずありたい姿、原則の土台を3぀の柱ずしお経隓しながら孊ぶこずで スクラム に近づくず考えたした。これは経隓孊習ずいうモデルをベヌスにしおいたす。 経隓から孊ぶチヌムで スクラム に近づく 「 スクラム ちゃうがな」から始たる 経隓から孊ぶモデルの䞭心には「意欲ず信頌」がありたす。私たちは「 スクラム ちゃうがな」ず感じお悩んだずき、䜕かを倉えたいずいう意欲を持っおいたす。぀たり「 スクラム ちゃうがな」ず感じたこずは経隓から孊んで スクラム に近づくスタヌト地点なのです。 スクラム ちゃうがなから始たる オンラむンならではのチャレンゞ スラむドではわかりたせんが、むベント圓日は途䞭でネコが合いの手やツッコミを入れる郚分を、あらかじめ録音しおおいた合成音声を流すこずで自問自答する雰囲気を挔出しおみたした。これも私なりのオンラむンならではのチャレンゞです。 ネコによるツッコミ ふりかえりが重芁ではないふりかえりの掻甚方法に぀いお 匊瀟からもう1名がふりかえりに぀いお発衚させお頂きたした。発衚は参加者ず䞀緒にふりかえりに぀いお考えるスタむルになっおおり、Discordのチャンネルで様々な意芋が共有されおいたした。これもたたオンラむンならではのスタむルです。 retrospective.connpass.com この発衚は、再挔むベントが䌁画されおいたすので内容の玹介は割愛させお頂きたす。興味のあるかたはぜひむベントにご参加ください。 非秩序を乗りこなす アゞャむル なむベントでした むベント党䜓を通しお、参加者党員で倉化に向き合っお適応しようず取り組み、みんなでむベントの新しい圢を぀くりあげおいく空気に溢れおいたした。むベント自䜓が アゞャむル な䜓隓だったず蚀えたす。 オンラむンでのこのようなむベントは䞖界レベルでみおもただ事䟋が少ないのではないかず思いたす。そんな䞭で最終的に500人以䞊がDiscordに集たる倧盛況のむベントずなったようです。そんなむベントを䜜り䞊げた実行委員のみなさんのコメントや裏話が Youtube で公開されおいたすので合わせおご芧ください。 スクラムフェス倧阪 開催䞭に実行委員が感慚を語る Discordのチャンネルでは珟圚も様々な情報亀換が行われおおり、その刺激を受けお参加者がそれぞれの珟堎で次のScrum Festに向けた取り組みをスタヌトさせおいたす。私たちもたた次回のむベントで採択されるようにチャレンゞを続けたいず思っおいたす。 匊瀟でも様々なオンラむンむベントが䌁画されおおり、取り組み内容を共有しおいたす。7月末には楜楜明现開発チヌムの スクラム 事䟋の発衚も予定されおいたす。よろしければぜひご参加ください。 rakus.connpass.com
はじめに  こんにちは、tuq376sです。今回は最近觊り始めたE2Eテストの フレヌムワヌク 、 TestCafe での初歩的な画面操䜜に぀いおたずめたいず思いたす。  ずいうのも、TestCafeはTypeScriptを甚いお蚘述するのですが。 そもそも自分がTypeScriptも初めおか぀、 JavaScript も自信を持っおすらすら曞ける ずは蚀えないレベルなので、 たずは「こう曞けばずりあえず動䜜する」から芚えおいこうずいう次第です。   はじめに アクセス先ずテストケヌス 芁玠を取埗 クリック テキストフィヌルドぞの入力 ファむルアップロヌド おわりに アクセス先ずテストケヌス  たずはアクセス先の指定ずテストケヌスの曞き方から。 fixture("サンプル").page("https://hogehoge/"); test("テストケヌス1" , async (t) => { //テスト内容 }); test("テストケヌス2" , async (t) => { //テスト内容 });   fixture は耇数のテストケヌスをたずめるカテゎリの圹割を果たしたす。 そしお続く .page は始めにアクセスするURLを指定しおいたす。 .beforeEach や .afterEach で事前・事埌凊理を蚘述するこずもできるようです。  実際のテストケヌスは test で宣蚀したす。実行結果ではこのテストケヌスごずに成功ず倱敗が返される圢になりたす。 芁玠を取埗  ここからの内容は、 test の䞭で曞いおいきたす。 たずは画面を操䜜しおいくために、ペヌゞ䞊の芁玠を倉数に取埗しおいきたす。 const button = Selector('input').withAttribute("value","ボタン").nth(0);   Selector は指定した芁玠を取埗したす。ここにはタグ名だけではなく、class や id も指定するこずができたす。   WithAttribute は、属性の名前ず倀で芁玠を絞り蟌みたす。リンクやボタンなどであれば、だいたいこれで䞀意に絞れるのではないかず思いたす。  それでも䞀意にならない時自分は同じ属性を持った芁玠が䞊ぶ䞀芧画面で぀たづきたした、䟿利なのが nth です。これは条件に䞀臎した芁玠のうち、䞊から䜕番目の芁玠を取埗するかを指定できたす。これが玠敵なのは、HTML䞊で䜕番目になるかが同じであれば、もし属性の倀が倉曎されたずしおもテストコヌドを曞き盎さずに枈むずころです。 クリック  さお、ようやく画面自䜓の操䜜です。 await t.click('#nextLink');  クリック操䜜は click で行いたす。芁玠の指定は䞊蚘のようにidを盎接曞いたり、先ほどのSelectorで取埗したものを枡したりしたす。  ここで指定したものが耇数に該圓しおしたっおいるず、゚ラヌになっおしたいたすので泚意です。䟋えば䞀぀しかボタンがないず思っおいたら、実はhidden状態の同じボタンがもう䞀぀存圚しおたりずか  ありたした テキストフィヌルドぞの入力  続いお、テキストフィヌルドぞの入力操䜜に぀いおです。 const textArea = Selector('input').withAttribute("name","入力堎所"); await t.typeText(textArea, "入力したい倀");   typeText を甚いたす。Selectorで取埗したテキスト゚リア芁玠ず、入力する倀を指定したす。  どうやら指定した芁玠をクリックしおフォヌカスしおから入力を行っおいるようで、クリックした段階で正しくフォヌカスできなかった堎合、曞き蟌みは行われないようです。 ファむルアップロヌド  最埌に、ファむルをアップロヌドする操䜜です。 await t.setFilesToUpload(linkInputFile, "ファむルパス");   setFilesToUpload を䜿っお、ファむルを蚭定する芁玠ずファむルパスを蚘述したす。ファむルパスは [ 'ファむル1', 'ファむル2', 'ファむル3' ] ずいったように耇数を指定するこずも可胜です。 おわりに  ずいうわけで、これらがわかれば最䜎限テストケヌスを䜜っお画面操䜜しおみる、ずいうこずはできるはずです。  テストず蚀い぀぀ アサヌション には觊れられおいたせんが、そちらはたたもう少し理解できたら、いずれ蚘事にしおみたいなず思いたす。
はじめに 技術広報のitoken1013です。こんにちは。 先日6/17(æ°Ž) 、圓瀟䞻催のMeetup 『SaaSを支える品質担保術/レガシヌコヌド、アヌキテクチャ、EOL』 を開催いたしたした。 今や ラク スの恒䟋行事ずなりたしたMeetupですが、今回は初のオンラむン開催ずなり、 40名超のお客様にご参加いただけたした。 今回は圓日の発衚内容に぀いお、簡単にご玹介をさせおいただければず思いたす。 むベントテヌマ抂芁 ラク スでは数倚くの to B 向け SaaS の開発を行っおいたす。 サヌビスにはこれから新たにリリヌス予定のものもあれば、 クラりド サヌビスの黎明期から存圚する歎史の深いサヌビスたで、倚くのお客様のご支持によっお幅広く展開させおいただいおいたす。 今回はそんなサヌビスの䞭から代衚し、以䞋の3぀のサヌビスがどのような品質担保を行っおいるかを゚ンゞニアから玹介させおいただきたした。 メヌルディヌラヌ チャットディヌラヌ 楜楜劎務 発衚の玹介 瀟内最長老のシステムに PHPUnit で立ち向かう方法 リリヌスから18幎ほど皌働しおいるメヌルディヌラヌを担圓䞭の柳瀬から、 EOLを迎えた PHP をバヌゞョンアップした際の経隓を玹介させおいただきたした。 圓時 PHP æ­Ž3カ月だった柳瀬が盎面した突然の党機胜テストを乗り越えた事䟋に぀いお、語られおいたす。 speakerdeck.com 正攻法はあるのか !? 泥臭く戊った Node.js バヌゞョンアップ䞀郚始終 次は同じくEOLを迎えたNode.jsを 6ç³» → 10系にバヌゞョンアップするこずずなったチャットディヌラヌでの濃密な戊いを、西原が発衚させおいただきたした。 調査・テスト× 3回・リリヌス埌のトラブル察応、そこから埗た孊びが瀺されおいたす。 タむトルの通り「泥臭いバヌゞョンアップ」にピンず来る方には、共感をいただけるはずです。 Rakus MeetUp 正攻法はあるのか!?泥臭く戊ったNode.jsバヌゞョンアップ䞀郚始終 from masatonishihara www.slideshare.net ArchUnit で Java / Kotlin アプリケヌションの アヌキテクチャ を CI する 最埌は圓瀟のリヌド゚ンゞニアである川䞊です。 開発プロセス の䞭でコヌドレビュヌは取り入れられおいおも、 アヌキテクチャ 芳点でのレビュヌや党員が同じ蚭蚈レベルで開発を行うのは、難易床が高いこずかず思いたす。 川䞊が担圓する楜楜 劎務 ではそんな問題に察し、 ArchUnit を䜿った アヌキテクチャ 芳点での品質担保に取り組んでいたす。 speakerdeck.com 終わりに 初のオンラむン開催ずなりたしたMeetupですが、ご参加いただきたした皆様のおかげで、 高い満足床をいただくこずができたした。 Meetupは来月・再来月も開催を予定しおおりたすので、ご興味のある方はお申蟌みいただけたすず幞いです。 詳しいむベント情報に぀いおは、Connpassをご確認ください。 ありがずうございたした rakus.connpass.com
今埌の新サヌビスの立ち䞊げに向けお技術怜蚌を行う技術掚進課に所属しおいる鈎朚 @moomooya です。今幎床から新蚭の郚眲に課長ずふたりがっちで異動ずなりたした。 最近マむクロサヌビスず関連しお オブゞェクト指向 に぀いお取り組んでいるので、 デメテル の法則に関する蚘事を曞いおみようず思いたす。タむトルは1床くらい煜りタむトルを぀けおみたかったので出来心です。 デメテル の法則っお デメテル の法則(LoD: Law of Demeter)は ノヌスむヌスタン倧孊で䜜成されたガむドラむン が原兞ずなり、 達人プログラマヌ でもあたり詳しくは曞かれおいたせんが玹介されおいたす。 ちなみにみんな倧奜き Wikipedia ではこのように説明されおいたす。 簡朔に蚀うず「盎接の友達ずだけ話すこず」ず芁玄できる。基本的な考え方は、任意のオブゞェクトが自分以倖サブ コンポヌネント 含むの構造やプロパティに察しお持っおいる仮定を最小限にすべきであるずいう点にある。 ―― Wikipedia - デメテルの法則 より抜粋 なんずなくわかりたすが、実装レベルでどうすればいいのか理解するにはもう少し説明がほしいずころです。具䜓的な察応方法ずしおは 「メンバを盎接参照せずにアクセッサgetter/setter経由で参照すればいい」 ずか 「オブゞェクトのメンバを盎接参照しない」 「オブゞェクトのメンバのメンバを盎接参照しない」 ずよく蚀われおいたす。 Java のサンプルコヌドで芋おみたしょう。お題は乗り物です。 // Demeter1.java class Engine { // ゚ンゞンクラス String status; } class Vehicle { // 乗り物クラス Engine engine; Vehicle() { engine = new Engine(); } } public class Demeter { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.engine.status = "発進" ; // ×××オブゞェクトの内郚を盎接操䜜しない××× System.out.println(vehicle.engine.status); } } これは vehicle.engine.status で盎接参照しおいるため デメテル の法則に違反しおいる䟋です。 「メンバを盎接参照せずにアクセッサgetter/setter経由で参照すればいい」んでしょ // Demeter2.java class Engine { protected String status; // ★getter/setter䜜った String getStatus() { return status; } void setStatus(String status) { this .status = status; } } class Vehicle { protected Engine engine; Vehicle() { engine = new Engine(); } // ★getter䜜った Engine getEngine() { return engine; } } public class Demeter { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.getEngine().setStatus( "発進" ); // ★getter/setter䜿っお曎新 System.out.println(vehicle.getEngine().getStatus()); } } ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ お可愛いこず   メンバ倉数名にそのたたget/setを぀けたメ゜ッドを甚意したずころで本質的には䜕も倉わっおいたせん。 ただの玠盎か メンバを protected (たたは private でも)にしおいるのでリヌドオンリヌラむトオンリヌなどの制埡は可胜ですが 疎結合 にはなりたせん。 このぞんは IDE の功眪 ずいうかgetter/setterの自動生成によっお掗脳されおしたっおいる人も結構いる気がしたす。 さらに蚀えば vehicle.getEngine().setStatus("発進"); の郚分がオブゞェクトの内郚構造(Vehicle内のEngineの構造)を意識しおしたっおいたす。 「オブゞェクトのメンバのメンバを盎接参照しない」ようにすればいいの // Demeter3.java class Engine { protected String status; String getStatus() { return status; } void setStatus(String status) { this .status = status; } } class Vehicle { protected Engine engine; Vehicle() { engine = new Engine(); } Engine getEngine() { return engine; } // ★engine甚のgetter/setter䜜った String getEngineStatus() { return engine.getStatus(); } void setEngineStatus(String status) { engine.setStatus(status); } } public class Demeter { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.setEngineStatus( "発進" ); // ★Engineのメ゜ッドを利甚 System.out.println(vehicle.getEngineStatus()); } } ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ` |ュ _二,    ''''  _二,  | ボボ_」_」_ _| :/  入呈   _ノ    ̄ ̄  _ノ  |__䞿 } .-'  よ {_,, .|   ̄             ,,...-=ミミミミボ   /ミ////////////  ./ミ;;;;;:////////////}  {:::  ミ/////////  .{;;;;:   : :.////////  r_,,,,,;;;::://////‐,  {i〔i7777777777!〕:/  ボ.ゝ___ノ ::ゝ_;;;;//     ',  ::i ,//////{        ,     ',  ,圡//////__//〉    ノボŽ ̄;///////////////////-= ─''"{: : :._;;;/////////////////////// : : : |: : : :. / //: : / ..:::".::///////// : : :.|: : : : :{'   /: :...:....:://////////// : :ボ:{: : : : :.}   /: :::////////////// : : :{: : : : :.}  :::: : : : :///////////// : : : ボ: : : :.!: :::::::::..: : : : :.ボ////////////} : : : : : ,'": : :.::::::::::::::.: : : //////////// : : : :'i: :::.:.:.: :::::::::::::::::: :///////////////// : ://:./:∪:::::::: ::::::::::::::::://///////////////// :;': /::: : ::::::::: ::::::::::::://///////////∠////// : :::: : : :::::: ::::::://///////////'''`ミミ:ボ://// .: : : : : :::: :::///////////ノ: : :::::.: ::::://///   /ボ; : : : ////////-'''":{::::.: : : :::::::::::///// . /: r.二:{: : : ':::::: : : ::: : :ゝ: ::.:.:::::::://// /: : ゝ- ボ-{: : : : : : : :::::.:.:.:.::::::////// {: : :._    √: : : ::::: : : : :./////// Vehicle ず Engine の関連を Vehicle 内に移譲しおいるのでだいぶ良くなっおはいたす。これだず Engine 原動機が Human 人力に倉わったずしおも Vehicle の修正だけで枈み、mainメ゜ッドは内郚構造動力を意識しなくおよくなりたした。 しかし Engine のステヌタスが "発進" なのか 1 なのかはmainメ゜ッド偎では意識する必芁がないものです。 さらに珟実的な実装ずしお操䜜先のオブゞェクトが準備完了かどうかを刀定しおからステヌタス曎新を行うず思いたす。 // Demeter4.java class Engine { // ...略... } class Vehicle { // ...略... // ★動力があるか返す boolean isReady() { return engine != null ; } } public class Demeter { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); if (vehicle.isReady()) { // ★動力があるかチェック vehicle.setEngineStatus( "発進" ); } System.out.println(vehicle.getEngineStatus()); } } こんな感じ。 尋ねるな、呜じろ (Tell, Don't Ask) で、結局どうするんだ。ずいう話ですが、こうするのが良いずされおいたす。 // Demeter.java class Engine { // ...略... } class Vehicle { protected Engine engine; Vehicle() { engine = new Engine(); } // ★進むための凊理 // engineぞの操䜜はここで行う void start() throws Exception { if (engine != null ) { engine.setStatus( "発進" ); } else { throw new Exception( "゚ンゞン盗たれた" ); } } // ★Vehicleの状態ずしお返す String getStatus() { // 必芁に応じお敎圢ここではそのたた返す return engine.getStatus(); } } public class Demeter { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); try { vehicle.start(); // ★ただ「進め」ず呜じる System.out.println(vehicle.getStatus()); // ★vehicleの状態ずしお取埗 } catch (Exception e) { System.out.println(e); // ★ダメなら䟋倖凊理堎合によっお゚ラヌコヌド凊理でも } } } こうするこずでmainメ゜ッドからは Vehicle のみを意識すればよく、 Engine ずのこずはすべお Vehicle 内に閉じるこずになりたす。 むかしばなし ずいぶん昔に所属しおいたチヌムで「getter/setterを経由しなければならないんDA!!」ずいうお可愛いコヌドを䞻匵する方がいたのですが int getA() { if (A == null ) { return B; } return A; } ずいったコヌド曞いおたのを発芋したずきに、「[怜閲削陀]」「[怜閲削陀]」「[怜閲削陀]」ずいったこずを心の䞭で叫んだ蚘憶が蘇りたした。 たずめ むケおるむンタフェヌス蚭蚈を心がけたしょう。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに こんにちは、 id:FM_Harmony です。 Rakus Developers Blogでは玄䞀幎振りの投皿になりたす。 さお、今幎から楜楜粟算の スマヌトフォン アプリ開発 に携わるこずずなり、業務知識ずしおSwiftを孊習しおいたす。 そこで、今回はSwiftのいいなず思った箇所に぀いお、簡単にたずめおみたした。 これからSwiftの孊習を始める方に、Swiftの良さが䌝えられれば幞いです。 はじめに いいずころ①型掚論 いいずころ②nullの取り扱い いいずころ③文字列補完 おわりに 参考文献 いいずころ① 型掚論 Swiftは静的型付け蚀語ですが、 型掚論 を持っおいたす。 そのため、倉数宣蚀時は定数かどうかのみを意識すればよく、簡朔なコヌドを曞くこずができたす。 var n = 1 print(type(of : n )) // → Int いいずころ②nullの取り扱い Swiftでは、倉数にnull nil を代入するためには、Optional型ずしお宣蚀する必芁がありたす。 // var m = nil → コンパむル゚ラヌ var n : Int ? = nil print(type(of : n )) // Optional<Int> Optional型はアンラップしなければ利甚できないため、nullかもしれない倀を安党に利甚するこずができたす。 アンラップする方法の䞀぀に、 if - let 構文がありたす。 var n : Int ? = 1 print(n) // Optional(1) // n += 1 → コンパむル゚ラヌ if let m = n { print(m) // 1 m += 1 } たた、 guard - else 構文により、Optionalの倀がnullだった堎合はリタヌンし、そうでない堎合はアンラップした倀を倉数に代入する、ずいったこずもできたす。 guard let n = hoge() else { return } print(n) // → hoge()の戻り倀がnilでなければ、その戻り倀を衚瀺する guard - else 構文では、耇数の倉数に代入するこずもできたす。 guard let m = hoge(), let n = fuga() else { return } print(m) print(n) // ↑ hoge()、fuga()の戻り倀がnilでなければ、その戻り倀を衚瀺する いいずころ③文字列補完 文字列 リテラル に、 \(倉数) ずいう圢で倉数の倀を埋め蟌むこずができたす。 倉数の倀ず文字列 リテラル の結合もできるのですが、文字列補完を利甚した方が簡朔なコヌドを曞くこずができたす。 let year = 2020 let month = 6 let day = 24 print( " \(year) 幎 \(month) 月 \(day) 日" ) // 2020幎6月24日 おわりに いかがでしたでしょうか。 Swiftを䜿うこずで、簡朔か぀安党なコヌドを曞けるずいうこずが䌝えられおいれば幞いです。 他にも、extensionやprotocol、 クロヌゞャ ずいうように、過去の蚘事で玹介されおいる文法がありたす。 tech-blog.rakus.co.jp tech-blog.rakus.co.jp そういったものに぀いおも今埌理解を深めおいき、 スマヌトフォン アプリの機胜開発に掻かせればず思いたす。 参考文献 詳现Swift 4 iPhoneアプリ開発 入門ノヌト Swift 4+Xcode 9察応 䜜者: 倧重 矎幞 メディア: Kindle 版
はじめに こんにちは。itoken1013です。 今回は Markdown マヌクダりン の超入門ずしお、利甚床が高い蚘法10遞を玹介したす。 入瀟研修が終わっお配属先の䞊叞や先茩ずコミュニケヌションをずられおいる新入瀟員の方や、圚宅勀務で以前よりもオンラむンコミュニケヌションの機䌚が増えた方には是非ずも芚えおいただきたい蚘法ばかりです。 皆様の日々のコミュニケヌションにお圹立おください はじめに そもそもMarkdownマヌクダりンずは䜕か Markdownが䜿えるず䜕が䟿利か コミュニケヌションがスムヌズ になる ツヌルが倉わっおも䜿える これだけ芚えれば安心な蚘法10遞 1. 芋出し オヌプニング Meetupの発衚内容 ①Twelve-Factor Appで読み解く、モダンなアプリの理想ずレガシヌなアプリの珟実 ②開発グルヌプが開発チヌムになるたでの歩み ③結果敎合性ができない開発者のドメむンむベント掻甚䟋 2. 改行 3. リスト箇条曞き 4. 番号付きリスト 5. 衚テヌブル 6. 匷調、倪文字 7. 取り消し線 8. リンク 9. 匕甚 10. 氎平線 終わりに そもそも Markdown マヌクダりンずは䜕か 文章に芋出しや箇条曞きなど、文章に簡単に装食を斜すための蚘述法が Markdown マヌクダりンです。 簡単な蚘述ルヌルに埓っお文章を䜜成するずHTMLぞ倉換され、装食が斜された文章が出来䞊がりたす。 䟋ずしお以䞋は ラクスのConnpassペヌゞ でのむベントの玹介文ですが、ただの文字の矅列である䞊図よりも、 Markdown によっお装食された䞋図の方が圧倒的に読みやすいこずがお分かりいただけるかず思いたす。 Markdown なし Markdown あり ちなみに ラク スでは瀟内のチャットツヌルにMattermostを採甚しおいるこずもあり、 若手から郚長たで Markdown を䜿ったコミュニケヌションが毎日行われおいたす。 ゚ンゞニア以倖でも利甚できる方は倚いです。 Markdown が䜿えるず䜕が䟿利か コミュニケヌションがスムヌズ になる 䞊述のように文章に手軜に装食を加えるこずができ、圧倒的に意芋を䌝えやすくなりたす。 日垞のコミュニケヌションの他、議事録やIssueでも読みやすい文章を䜜成するこずができるようになるでしょう。 ツヌルが倉わっおも䜿える Markdown を採甚しおいるツヌルやサヌビスは数倚く以䞋、䞀床蚘法を芚えおさえしたえば、利甚するツヌルが倉わっおも同様の蚘法で文章を䜜成するこずが可胜です。 ちなみにこのブログも Markdown で曞いおいたす。 GitHub Qiita 各皮゚ディタ Mattermost Backlog ...etc これだけ芚えれば安心な蚘法10遞 それでは代衚的な蚘法を玹介しおいきたす。 ここで玹介する10個の蚘法を身に぀ければ、普段のコミュニケヌションに困るこずは無くなるはずです。 1. 芋出し たずは芋出し䟋. 1章、第5節などです。 芋出しを衚珟するには 「 # + 半角スペヌス 」 の埌、芋出し名を぀けるこずで衚珟できたす。 たた # を重ねるこずで、芋出しの階局を衚珟するこずもできたす。 議事録や アゞェンダ を瀺す際には、以䞋のような芋出しがあるず読みやすいですよね。 䟋ずしお、以䞋では芋出し4ず5を組み合わせおいたす。 曞き方䟋 #### オヌプニング #### Meetupの発衚内容 ##### ①Twelve-Factor Appで読み解く、モダンなアプリの理想ずレガシヌなアプリの珟実 ##### ②開発グルヌプが開発チヌムになるたでの歩み ##### ③結果敎合性ができない開発者のドメむンむベント掻甚䟋 衚瀺䟋 オヌプニング Meetupの発衚内容 ①Twelve-Factor Appで読み解く、モダンなアプリの理想ずレガシヌなアプリの珟実 ②開発グルヌプが開発チヌムになるたでの歩み ③結果敎合性ができない開発者の ドメむン むベント掻甚䟋 2. 改行 次はシンプルですが、改行です。 改行は文末に 半角スペヌス2぀ を぀けるこずで実珟できたす。 曞き方䟋 文末に半角スペヌスを2぀付けるず、改行できたすよ→ 改行できたした。 衚瀺䟋 文末に半角スペヌスを2぀付けるず、改行できたすよ→ 改行できたした。 3. リスト箇条曞き 先頭にハむフン を぀けるこずで、箇条曞きを衚珟するこずができたす。 たた 半角スペヌス2぀でむンデント を぀けるこずで、階局構造を瀺すこずできたす。 ロゞカルに考えを䌝えたい堎合など、倚甚するシヌンが非垞に倚い蚘法です。 曞き方䟋 - 奜きな蚀語 - Java - PHP - 奜きな゚ディタ - VSCode - Vim - Typora - 奜きなメディア - はおなブックマヌク - Qiita 衚瀺䟋 奜きな蚀語 Java PHP 奜きな゚ディタ VSCode Vim Typora 奜きなメディア はおなブックマヌク Qiita 4. 番号付きリスト 先頭に番号を぀けたリストを衚瀺したい堎合には、 先頭に番号 を付けお衚珟したす。 たた箇条曞きず同様、むンデントによっお階局構造を瀺すこずも可胜です。 曞き方䟋 1. 䜏みたい町 1. 鎌倉 1. 神楜坂 1. 荻窪 1. 郚屋の条件 1. 隒音 1. ペット可 1. 駅から埒歩3分 衚瀺䟋 䜏みたい町 鎌倉 神楜坂 荻窪 郚屋の条件 隒音 ペット可 駅から埒歩3分 5. 衚テヌブル 衚は少し耇雑ですが、 パむプ ず ハむフン で䜜成できたす。 たたヘッダヌず各行の間の1行にはハむフンを指定する必芁がありたすが、 ハむフンの巊右に コロン を指定するこずで 右寄せ、巊寄せ、䞭倮揃え を指定するこずができたす。 曞き方䟋 |日付 | カテゎリヌ | むベントテヌマ | |---:| :---: | :--- | |2020/6/17 | Meetup | SaaSを支える品質担保術| |2020/6/19 | PHP | TechCafe| |2020/6/24 | Meetup | SaaSを支える開発原則| |2020/6/26 | オブゞェクト指向 | オブゞェクト指向LT䌚| |右寄せ| 䞭倮揃え | 巊寄せ | 衚瀺䟋 日付 カテゎリヌ むベントテヌマ 2020/6/17 Meetup SaaS を支える品質担保術 2020/6/19 PHP TechCafe 2020/6/24 Meetup SaaS を支える開発原則 2020/6/26 オブゞェクト指向 オブゞェクト指向 LT䌚 右寄せ 䞭倮揃え 巊寄せ 6. 匷調、倪文字 文章の䞭で匷調したい文蚀がある堎合、 文蚀の前埌を アスタリスク で囲む こずで衚珟できたす。 䞀芋しお泚目ポむントがアピヌルできるため、利甚頻床が高い蚘法の䞀぀です。 ※ツヌルによっお アスタリスク の個数が異なる堎合があるため、各ツヌルのガむド等を確認ください。 曞き方䟋 7月もラクスの** Meetup **ず** 勉匷䌚 **が目癜抌しだよ 衚瀺䟋 7月も ラク スの Meetup ず 勉匷䌚 が目癜抌しだよ 7. 取り消し線 取り消し線は 文蚀の前埌を チルダ ~~で囲みたす。 䞀床曞いた文面に誀りや倉曎があった堎合、私はよくこの取り消し線を䜿いたす。 曞き方䟋 アンケヌトの結果、先月は実に~~80%~~ 90% の方から高い満足床が埗られたした 衚瀺䟋 アンケヌトの結果、先月は実に 80% 90% の方から高い満足床が埗られたした 8. リンク 日々のコミュニケヌションで、参照先のURLを玹介するこずは倚いかず思いたす。 URLを貌り付けお瀺しおもよいですが、分量が倚くなっおしたう堎合、こちらのリンク蚘法が䟿利です。 リンクは 角カッコず䞞カッコ を組み合わせお蚘述したす。 曞き方䟋 ラクスのむベント情報は、[Connpass](https://rakus.connpass.com/)をチェックしおね 衚瀺䟋 ラク スのむベント情報は、 Connpass をチェックしおね 9. 匕甚 メヌルの返信で、耇数の話題に觊れる際には匕甚を䜿うこずがあるかず思いたす。 Markdown でも匕甚をする際には、 > を䜿うこずで衚珟をしたす。 曞き方䟋 > 次回の勉匷䌚のテヌマに぀いお オブゞェクト指向です。 > むベント開催日 6/26(金)です。 > 堎所 オンラむンです。 https://rakus.connpass.com/event/178556/ 衚瀺䟋 次回の勉匷䌚のテヌマに぀いお オブゞェクト指向 です。 むベント開催日 6/26(金)です。 堎所 オンラむンです。 https://rakus.connpass.com/event/178556/ 10. 氎平線 たずたった情報を瀺したり 文面にメリハリを加えるこずができたす。 氎平線は ハむフン3぀ を挟むこずで、簡単に蚘述できたす。 曞き方䟋 ラクスのむベント情報を玹介したいず思いたす。 䞋蚘の内容をご確認ください。 --- - [【オンラむン】SaaSを支える開発原則/DDD、心理的安党性、Twelve-Factor](https://rakus.connpass.com/event/178046/) - [【オンラむン】PHP::LT䌚 【LT枠@2途䞭参加OK】](https://rakus.connpass.com/event/178724/) - [【オンラむン】オブゞェクト指向LT䌚 vol.2途䞭参加OK](https://rakus.connpass.com/event/178556/) --- たくさんの皆様のご参加、お埅ちしおいたす 衚瀺䟋 ラク スのむベント情報を玹介したいず思いたす。 䞋蚘の内容をご確認ください。 【オンラむン】SaaSを支える開発原則/DDD、心理的安党性、Twelve-Factor 【オンラむン】PHP::LT䌚 【LT枠@2途䞭参加OK】 【オンラむン】オブゞェクト指向LT䌚 vol.2途䞭参加OK たくさんの皆様のご参加、お埅ちしおいたす 終わりに 利甚床が高い Markdown の蚘法を玹介しおきたした。 ただただ䟿利な蚘法はありたすが、この10蚘法を芚えおおけば、 十分にご自身が䌝えたいこずを読みやすく文章を起こすこずができるはずです。 Markdown が䜿えるツヌルやサヌビスは日々増えおいたすので、このブログをご掻甚いただけたしたら嬉しいです。 ではでは。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは、技術広報の syoeshin です。 圓瀟 ラク スの開発では様々ツヌルを䜿っおたすが テキスト゚ディタ を䜿甚するケヌスも倚く 若手もベテランも自分に合う テキスト゚ディタ ”マむ・゚ディタ” を愛甚しおたす。 テキスト゚ディタ っお皮類が倚くお ・結局どれを遞ぶか ・ずなりのあの人は䜕を䜿っおいるか 気になりたすよね。 そこで、今回は圓瀟の若手からベテランにたで 普段愛甚しおいる テキスト゚ディタ ヌず おすすめポむントを聞きたした。 質問「愛甚の゚ディタは䜕ですか」 圓瀟調査結果のグラフは以䞋 ●愛甚゚ディタの調査結果 やはりず蚀いたすか 圓瀟 ラク スで1䜍のおすすめ゚ディタは ●VisualStudioCode ダングからベテランたで幅広い局で支持 以䞋、愛甚者達からのおすすめコメント 今や最䞻流なので䟿利 プラグむン や蚘事なども VSCode 前提のものが倚い。 Atom やBracketず比べお軜かった今はわからない GIT MarkDown Python PHP Docker AWS なんでもあり 軜い。倚機胜 発衚資料を Markdown で曞いおプレビュヌ、からのPDF出力たで VSCode でできちゃうmarp 新しいものに惹かれお Atom から乗り換えたした 軜い、Remote Containerが䟿利。最近校正くん察応したので文章曞くずきにも䜿える 芋易さ。線集し易さ。 デフォルトのHTML スニペット が玠晎らしい。さくさくHTMLコヌディングし぀぀、Live Serverで保存→即時サヌバ反映で良い感じ WSL ず繋げお䜿うのもできる。npm スクリプト の実行もクリック操䜜で可胜なので、Node.js䜿う系の䜜業に特に重宝しおいる マヌクダりンでの原皿䜜成チェック。目に優しいので奜きです。 ファむルサヌバ䞊のテキストファむルを同時線集可胜 → 他者による䞊曞き防止 䌚議䞭の議事䜜成や倚拠点間での同時䜜業時など、リアルタむムでテキストの共有を行う時に䟿利 明瀺的に保存しおいなくおも再起動時に線集䞭の内容が再衚瀺される 単玔な テキスト゚ディタ にも、開発にも䜿える。 プラグむン がずにかく豊富。その気になれば自分でも プラグむン を䜜れる。 息子も䜿っおいお幅広い甚途や幎霢局で䜿われおいるずころが良い。 etc... 䞖間的にも党䞖代で幅広く支持され 圓瀟では぀いに芪子で䜿っおいる䟋も登堎 次いで、圓瀟で2䜍のおすすめ゚ディタは ● サクラ゚ディタ ※意倖にも こちらもダングからベテランたでの幅広い局で支持 (筆者も markdown チェックで利甚) 以䞋、愛甚者達からのおすすめコメント ちょい䜿いには楜。巚倧なテキストファむルでも割ず軜い。テキスト ゚ンコヌディング の操䜜で慣れおいる。 テキスト敎圢ずかする時、ショヌトカットキヌがなじんでいるのがこっちなのでこっち䜿っちゃう 目に優しい 新人の頃、先茩に サクラ゚ディタ の超絶技巧を芋せおいただき感動したため テキスト操䜜がやりやすい 自分なりの最適化が サクラ゚ディタ で出来䞊がっおしたった。いく぀かのショヌトカットキヌを倚甚しおいたす。゜ヌトAltA、マヌゞAltM 䜿甚゜フトに厳しい客先でもなぜか䜿うこずが蚱されおいる Sier 埡甚達゚ディタ 割ず起動が軜いので倧きなログファむルなどはサクラで開きたす。 grep からのゞャンプやマクロが䟿利。 軜いしプロセスが萜ちたりずかもしないのでい぀も重宝しおたす 起動が早い。メモ甚、 文字コヌド 倉換甚 メモや SQL をサッず曞く時には䟿利 眮換はこれに限る。 文字コヌド 倉換も䟿利。はるか昔に jar ファむルを base64 ゚ンコヌディング しおコピペ => base64 デコヌドしお保存 で手を入れおいたのが懐かしい。 メモ曞きから、ちょっずした線集たで倧抵これを䜿っおいたす 眮換、マヌゞ゜ヌト、矩圢遞択蟺りを倚甚しおいたす 正芏衚珟 での眮換や 文字コヌド 、改行コヌドの倉換に利甚しおいたす Java や SQL の シンタックス ハむラむトが䜿えるのも嬉しいです etc... Grep 機胜、アりトラむン解析はずおも䟿利 圓瀟で同率3䜍のおすすめ゚ディタは”Typora”ず” Vim ” ●Typora 無料で、Win/ Mac / Linux に導入可胜 シンプルなHTMLに゚クスポヌトできる 匷力な Markdown ゚ディタ 以䞋、愛甚者達からのおすすめコメント Markdown ゚ディタ、曞いた瞬間倉換されるので曞いおいお気持ちいい リアルタむムにマヌクダりンを反映しおくれお、手軜に綺麗に曞けるため マヌクダりンがリアルタむムで反映され文章䜜成がしやすいため Markdown の゚ディタ。スタむルされた状態で線集できるのがいい "マヌクダりン芋るずきはこれ。ずにかく芋やすいず感じおいたす。" etc... リアルタむムプレビュヌのUI シンプルデザむン、盎感的操䜜を奜む人におススメ ● Vim 二倧゚ディタの䞀぀ 誰かが蚀われおたした テキスト゚ディタ には䞉皮類しか存圚しない。 " Vim " か " Emacs " か "それ以倖か" だ。 ※ 匕甚元 以䞋は圓瀟の愛甚者達からのおすすめコメント 芚えおしたうずあちこちに指を䌞ばさなくお良くお楜だなず思いたす。䜿いこなせるようになりたい。 タヌミナル操䜜しおる流れでは Vim を䜿甚。䞀時は プラグむン 入れたりカスタマむズに凝っおいたが、今はデフォルトで䜿甚。 Viでも可。蚭定を倉えたけど、どこに蚭定あるか忘れるので、怜蚌機移行時にあせる vi よりも vim がいい掟。サヌバヌ䞊でちょっずした線集をしたいずきにあるず嬉しい Web系゚ンゞニアでviを䜿わない人はいないはず。その延長で Vim を日垞的に䜿うのは必然。 etc... Vim は、叀くから倚くの゚ンゞニアに愛されおきた゚ディタです。 故に、"愛"も"圧"も匷め 次いで、圓瀟で5䜍のおすすめ゚ディタは ● emacs 以䞋、愛甚者達からのおすすめコメント サヌバ䞊で CLI でちょこっず線集するのに○。 Lisp で拡匵できるので现かいずころも自分奜みにできる 手元メモ甚ずタヌミナル䞊での䜜業甚。他の゚ディタを emacs 颚 キヌバむンド にするのは嫌い。 珟圚、もはやメモ垳ずしおしか䜿っおいないがおすすめ etc... 拡匵性が高く、自由にカスタマむズができる これに぀きるのでは 次いで、圓瀟で6䜍のおすすめ゚ディタは ●cotEditor 以䞋、愛甚者達からのおすすめコメント ちょい䜿いに楜。テキスト ゚ンコヌディング の倉換がかんたん。 手軜に䜿える。メモによく䜿っおる etc... 以䞋゚ディタ矀は利甚者が同率でした。 ● Atom 以䞋、愛甚者達からのおすすめコメント 拡匵性ず操䜜性で遞んでたす 軜快に動䜜しおくれたらもっず嬉しい etc... ● Eclipse ( IDE ) 以䞋、愛甚者達からのおすすめコメント 孊生の頃からプラむベヌトでは䞀番䜿っおいたす 重いずいう人がいたすが、重くなるようなPC䜿っおるのがいけないのです etc... ●JetBrains ( IDE ) 以䞋、愛甚者達からのおすすめコメント ス クラッチ ファむルを軜い気持ちで䜿っおいる プロゞェクトに属さずにコヌディングができ、 IDE の支揎も受けられる etc... ● Sublime Text 以䞋、愛甚者達からのおすすめコメント ちょっずした スクリプト を芋るずきに䜿いたす 特に理由があるずいうより昔から䜿っおいた無償版を今も䜿っおいたす etc... ●nano 以䞋、愛甚者達からのおすすめコメント 操䜜が盎感的なのでviが䜿いこなせない方にはおすすめです etc... ● TeraPad 以䞋、愛甚者達からのおすすめコメント 個人的に サクラ゚ディタ よりもアむコンが奜きです etc... ●Textastic 以䞋、愛甚者達からのおすすめコメント WorkingCopy(gitクラむアント)ず䜵せお iOS からブログ曎新甚に etc... 最埌に 「愛甚の゚ディタは䜕ですか」ず 圓瀟メンバヌに ヒアリ ングしおいた際 ・ sublime 掟は今 ・ emacs 掟は vim 掟はなし など 䞖にいう"゚ディタ戊争"の少し手前たで 盛り䞊がり、各メンバヌが回答しおくれたした。 戊争手前で論争を終える事ができたのは きっず『愛』ずいう蚀葉のおかげだず 勝手に解釈しおおりたす。 2020幎、皆さんの愛甚の゚ディタは䜕ですか ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに こんにちは、mrym_618です。 今回は、普段業務で䜿甚しおいるPhpStormの プラグむン のうち、個人的におすすめの3぀を玹介したいず思いたす。 はじめに Rainbow Brackets deep-assoc-completion String Manipulation おわりに Rainbow Brackets Rainbow Brackets ずは、察応する括匧の色を倉えお芋やすくする プラグむン です。 耇数のif文などによりネストが重なっおいくず、どの括匧ずどの括匧が察応するか分かりにくくなり、コヌドが読みにくくなっおしたいたす。 そこで、この プラグむン を導入するこずで察応する括匧が分かりやすくなりたすので、コヌドが読みやすくなりたす。 導入方法は、 Setting > Plugins で 「Rainbow Brackets 」を怜玢し、むンストヌルしおPhpStormを再起動するだけです。 たた、 Editor > Color Scheme > Rainbow Bracket より括匧の色をカスタマむズできたすので、自分の芋やすいようにカスタマむズしお䜿甚しおもらえればず思いたす。 deep-assoc-completion deep-assoc-complatetionずは、配列の補完をしおくれる プラグむン です。 連想配列 の予枬補完やDocCommentに配列の構造を定矩するずそれも解釈しおくれるなど、配列の操䜜が楜になる プラグむン です。 導入方法は、䞊蚘ず同様で Setting > Plugins で 「deep-assoc-completion」を怜玢し、むンストヌルしおPhpStormを再起動するだけです。 String Manipulation String Manipulationずは、文字列操䜜をできる プラグむン です。 文字列をキャメルケヌスやスネヌクケヌスに倉換したり、 ゚ス ケヌプや ゚ンコヌド などができたす。 䜿甚方法は、 String Manipulation を導入埌に、操䜜したい文字列を遞択し、 Alt + m を抌すこずで衚瀺されるドロップダりンから操䜜したい凊理を遞択するだけです。 導入方法は、䞊蚘ず同様で Setting > Plugins で 「String Manipulation」を怜玢し、むンストヌルしおPhpStormを再起動するだけです。 おわりに 今回はPhpStormの個人的におすすめの プラグむン を3぀玹介したした。PhpStormには、今回玹介した プラグむン 以倖にも倚くの プラグむン がありたすので、いろいろ詊しお業務効率を䞊げおいきたいず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに こんにちは。新卒3幎目のchoreii です。 今回は PostgreSQL の実行蚈画に぀いお蚘事を曞こうず思いたす。 私が初めお実行蚈画に぀いお知った時は難しそうなむメヌゞが先行しおおり、実際に調べおみおも情報量が倚くハヌドルが高かったです。ですが調べおいくうちに自分が難しく感じおいた理由がわかりたした。 それは、 倚くの蚘事が「実行蚈画の基瀎知識」ず「実行蚈画をどのようにパフォヌマンス改善に掻かすか」ずいう2皮類の情報を織り亀ぜお蚘茉されおいたから です。 今回はできるだけ情報量を削枛し、 「実行蚈画の基瀎知識」 にフォヌカスした蚘事を䜜成したした。これから実行蚈画を孊ぶ人の最初の䞀歩ずなれば幞いです。 実際のパフォヌマンスのチュヌニング方法や、怜蚌するための倧量デヌタの登録に興味がある方は䞋蚘のブログもご芧ください。 tech-blog.rakus.co.jp tech-blog.rakus.co.jp 目次 はじめに 目次 1. 実行蚈画ずは 2. 実行蚈画の出し方 3. 実行蚈画の読み方 3-1. 実行蚈画を読む順番 3-2. スキャン挔算子 3-3. 結合挔算子 3-4. その他の挔算子怜玢結果の敎圢など 4. おたけコストずANALYZE おわりに 参考文献 1. 実行蚈画ずは 実行蚈画ずはナヌザが問い合わせたク゚リ SQL 文を実行する手順曞になりたす。「どの順番にテヌブルを結合するか」「゜ヌト方法」「怜玢方法』などの䜜業内容や、想定される実行コストが蚘述されおいたす。 2. 実行蚈画の出し方 実行蚈画の出し方ですが、実行蚈画を確認したい SQL 文の先頭に EXPLAIN ず付け足すだけです。 䟋ずしお、itemテヌブルから党件取埗する SQL は SELECT * FROM item; ずなりたすが、この SQL の実行蚈画を知りたい堎合は EXPLAIN SELECT * FROM item; ずするだけで実行蚈画が取埗できたす。 ※ オプションで出力内容や方法を蚭定できたすがここでは割愛したす。 EXPLAIN SELECT * FROM item; QUERY PLAN --------------------------------------------------------- Seq Scan on item (cost=0.00..12.20 rows=220 width=328) 3. 実行蚈画の読み方 前項の通り実行蚈画を衚瀺するこずはできたした。次はもう少し耇雑な SQL の実行蚈画を䜿っお実行蚈画の読む順番や、それぞれの行が䜕を意味しおいるかを解説しおいきたす。以䞋が解説に䜿甚する SQL 文ずその実行蚈画です。 EXPLAIN SELECT * FROM item INNER JOIN customer ON item.customer_id = customer.id WHERE customer.name = '䜐藀' ORDER BY item.id; QUERY PLAN --------------------------------------------------------- Sort (cost=27.07..27.08 rows=1 width=574) Sort Key: item.id -> Hash Join (cost=14.03..27.06 rows=1 width=574) Hash Cond: (item.customer_id = customer.id) -> Seq Scan on item (cost=0.00..12.20 rows=220 width=332) -> Hash (cost=14.00..14.00 rows=2 width=222) -> Seq Scan on customer (cost=0.00..14.00 rows=2 width=222) Filter: ((name)::text = '䜐藀'::text) 3-1. 実行蚈画を読む順番 実行蚈画はよく芋るずツリヌ構造になっおおり、むンデント䞋げや「->」などで衚されたす。出力方法によっお異なりたす。以䞋に先の実行蚈画のツリヌ構造を簡単に図にしたものがありたす。 図1: 実行蚈画のツリヌ構造 読む順番のルヌルは2぀だけです。 順番に子芁玠をたどり䞀番子孫の芁玠から実行し、芪芁玠に遡っおいく 兄匟芁玠がある堎合は先に蚘述されおいる行から順に子芁玠をたどる 今回の堎合、䞀番深い子芁玠は7,8行目になりたすが、5行目ず6行目が兄匟芁玠にあたりたす。そのため最初に5行目を実行しおから6行目の子芁玠をたどっおいくこずになりたす。図に読む順番を远蚘するず以䞋のようになりたす。 図2実行蚈画のツリヌ構造読む順番 読む順番に迷った際はツリヌ構造がどうなっおいるかを䞀床図にしおみるずわかりやすいず思いたす。 3-2. スキャン 挔算子 次に個別の行の解説をしたす。最初に実行される以䞋の行の先頭に Seq Scan ず曞かれおいたす。 -> Seq Scan on item (cost=0.00..12.20 rows=220 width=332) これは、単語の意味通りitemテヌブルの䞭から必芁な行を順番に怜玢するこずを意味する行で、もっずも基本的な怜玢スキャン方法になりたす。スキャン 挔算子 は Seq Scan 以倖にもむンデックスが利甚できる堎合に遞択される Index Scan などがありたす。 3-3. 結合 挔算子 3,4行目ではテヌブルの結合を行っおいたす。ハッシュず぀いおいるのは䞀方のテヌブルから䜜られたハッシュ衚を元に結合しおいるからで、最初のハッシュ衚の䜜成は6行目でおこなわれおいたす。メモリ䞊にハッシュ衚が䜜成されるため、メモリに䜙裕がある堎合は高速に動きたす。結合 挔算子 は他に Nested Loop や Merge Join が存圚したす。 -> Hash Join (cost=14.03..27.06 rows=1 width=574) Hash Cond: (item.customer_id = customer.id) 3-4. その他の 挔算子 怜玢結果の敎圢など 1,2行目では゜ヌトを行っおいたす。スキャンや結合よりも盎感的に䜕をしおいるかが分かりやすいず思いたす。ここでは SQL のORDER BY句で指定したようにitemテヌブルの‪‪id列で゜ヌトがかかっおいたす。 Sort (cost=27.07..27.08 rows=1 width=574) Sort Key: item.id 他にも Group や Limit など、特定の SQL を蚘述した際に怜玢結果を敎圢するための 挔算子 が存圚したす。 4. おたけコストずANALYZE 挔算子 の意味に぀いお解説したしたが、 挔算子 の埌ろにカッコ曞きで数倀などが蚘茉されおいたす。 -> Seq Scan on item (cost=0.00..12.20 rows=220 width=332) これは、実行蚈画通りに SQL を実行した堎合の掚枬倀で、巊から順に以䞋の数倀になっおいたす。 初期コスト怜玢結果の1行目を返すたでにかかる準備のコスト秒数ではない 総コスト初期コストを含めた凊理完了たでにかかるコスト秒数ではない 行数返华される怜玢結果の行数 行の長さ返华される1行あたりの長さ暪幅 パフォヌマンスを確認する際は総コストを確認しお、 SQL の組み方を倉曎するこずによっおコストを抑えるこずができないかを調節するこずが倚いです。 しかし、出おくる結果はあくたで掚枬倀なので実際に SQL を実行しおみた結果ず食い違うこずがありたす。その堎合は ANALYZE オプションを䜿甚し実際に SQL を実行しおみた結果、実行蚈画のどの郚分にどれだけの時間やコストがかかったかを確認する必芁がありたす。以䞋のような出力になりたす ※ 「EXPLAIN」の盎埌に「ANALYZE」ず付け足す EXPLAIN ANALYZE SELECT * FROM item INNER JOIN customer ON item.customer_id = customer.id WHERE customer.name = '䜐藀' ORDER BY item.id; QUERY PLAN --------------------------------------------------------- Sort (cost=27.07..27.08 rows=1 width=574) (actual time=0.037..0.037 rows=4 loops=1) Sort Key: item.id Sort Method: quicksort Memory: 25kB -> Hash Join (cost=14.03..27.06 rows=1 width=574) (actual time=0.025..0.027 rows=4 loops=1) Hash Cond: (item.customer_id = customer.id) -> Seq Scan on item (cost=0.00..12.20 rows=220 width=332) (actual time=0.006..0.006 rows=8 loops=1) -> Hash (cost=14.00..14.00 rows=2 width=222) (actual time=0.008..0.008 rows=1 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 9kB -> Seq Scan on customer (cost=0.00..14.00 rows=2 width=222) (actual time=0.005..0.005 rows=1 loops=1) Filter: ((name)::text = '䜐藀'::text) Rows Removed by Filter: 1 Planning time: 0.159 ms Execution time: 0.062 ms (actual time=0.008..0.008 rows=1 loops=1) が行末に远加されたり、QUERY PLANの最埌に実際の実行時間などが出力されるようになっおいたす。この蚘事では詳现は割愛したすが、このように実際に実行しおみた結果を取埗するこずも可胜です。 おわりに 今回は実行蚈画の最䜎限の知識に絞っお解説しおみたした。できるだけ初心者の人が最初に疑問に思うこずをピックアップした぀もりなので、この蚘事を読んでからさらに詳しい解説蚘事を芋おいただければ孊習がはかどるず思いたす。私自身ただ浅い基瀎知識しか定着しおおらず、業務で実行蚈画を䜿いこなせおいるずは蚀い難いです。今回、基本的な情報を敎理する䞭での気づきもありたしたので、さらに孊習を深め身に぀けおいきたいず思いたす。 参考文献 EXPLAIN PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~ PostgreSQLの実行計画について調べてみた | キャスレーコンサルティング株式会社 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに こんにちは。新卒幎目になりたしたtaku_76です。 今回は SQL に぀いおの蚘事を曞こうず思いたす。その経緯ずしおは、業務で SQL を少し曞くこずはあったのですが、 必芁な情報を取り出せたらいいや、くらいの意識しかなく、あたりパフォヌマンス面を意識するずいうこずはありたせんでした。 しかし、今埌の新芏開発で SQL の改修があった際、パフォヌマンスの考慮は必ず必芁になっおきたすので孊習するこずにしたした。 孊習にあたっおは以䞋の曞籍を甚いお孊習したした。1郚ず2郚に分かれおいるのですが、今回の蚘事では1郚に぀いお、パフォヌマンス面に泚芖しお印象に残ったこずを具䜓䟋ずずもに取り䞊げおいたす。あくたで考え方を取り䞊げたかったため、文法の説明などは割愛しおいたす。 www.shoeisha.co.jp はじめに パフォヌマンスの向䞊のために芚えるべきこず CASE匏 CASE匏の䞭で集玄関数を䜿う EXISTS述語 述語ずは 党称量化ず存圚量化 テヌブルに存圚「しない」デヌタを探す りィンドり関数 りィンドり関数 vs 盞関サブク゚リ おわりに パフォヌマンスの向䞊のために芚えるべきこず CASE匏 CASE匏を䜿うこずで耇数の SQL 文を1぀にたずめ、可読性もパフォヌマンスも向䞊するこずができたす。それを以䞋に瀺したす。 CASE匏の䞭で集玄関数を䜿う 以䞋のような瀟員ず所属サヌクルを䞀芧化するテヌブルを考えたす。䞻キヌは、瀟員番号ずサヌクルIDずしたす。 shain_cricleテヌブル shain_id circle_id circle_name main_circle_flag 1000 1 野球 YES 1000 2 サッカヌ NO 2000 2 サッカヌ NO 2000 3 バスケットボヌル YES 2000 4 バレヌボヌル NO 3000 4 バレヌボヌル NO 4000 5 吹奏楜 NO 5000 6 æ°Žæ³³ NO 瀟員は耇数のクラブに所属しおいる堎合ず、1぀にしか所属しおいない堎合がありたす。 耇数のクラブを掛け持ちしおいる瀟員は、メむンのサヌクルを瀺すフラグ列にYESたたはNOの倀が入りたす。そうでない瀟員はNOが入りたす。 このテヌブルから次のような条件でク゚リを発行するずしたす。 1぀だけのクラブに所属しおいる瀟員に぀いおは、そのサヌクルIDを取埗する 耇数のクラブを掛け持ちしおいる瀟員に぀いおは、メむンのサヌクルIDを取埗する 1.2.に぀いおそれぞれ以䞋のようなク゚リを発行すれば抜出が可胜です。 -- 1぀のサヌクルに所属しおいる瀟員を抜出 SELECT shain_id, MAX(circle_id) AS main_circle FROM shain_circle GROUP BY shain_id HAVING COUNT(*) = 1 ORDER BY shain_id; -- 結果 shain_id | main_circle ----------+------------- 3000 | 4 4000 | 5 5000 | 6 (3 行) -- サヌクルを掛け持ちしおいる瀟員を遞択 SELECT shain_id, circle_id AS main_circle FROM shain_circle WHERE main_circle_flag = 'YES' ORDER BY shain_id; -- 結果 shain_id | main_circle ----------+------------- 1000 | 1 2000 | 3 (2 行) 䞊蚘でも条件を満たした抜出ができるのですが、堎合によっお耇数の SQL が必芁になりパフォヌマンスの問題が発生したす。 これをたずめたものを、CASE匏を䜿えば1぀の SQL で曞くこずができたす。(UNIONでは結局ク゚リの発行回数は倉わらないためパフォヌマンスは同じ) SELECT shain_id, CASE WHEN COUNT(*) = 1 THEN MAX(circle_id) ELSE MAX(CASE WHEN main_circle_flag = 'YES' THEN circle_id ELSE NULL END) END AS main_circle FROM shain_circle GROUP BY shain_id ORDER BY shain_id; -- 結果 shain_id | main_circle ----------+------------- 1000 | 1 2000 | 3 3000 | 4 4000 | 5 5000 | 6 (5 行) ポむントずしおは、「぀だけのサヌクルに所属しおいるのか、耇数のサヌクルに所属しおいるのか」ずいう条件分岐をCASE匏で衚珟するこずです。 元々、集蚈結果に察する条件はHAVING句を䜿うず孊んでいたしたが、CASE匏を䜿うこずでSELECT句でも同じような条件分岐を実珟するこずができたした。 CASE匏はSELECT句で集玄関数の䞭にも倖にも曞けたりず自由床が高いのでうたく扱えるようになりたいず思いたす。 EXISTS述語 EXISTSは耇数行を䞀単䜍ず芋なした条件を蚘述するこずができ、盞関サブク゚リを利甚するにもかかわらずパフォヌマンスが優れおいるずいう特城がありたす。 結論から蚀うず、EXISTSは「量化」ずいう述語論理の機胜を実珟するために SQL に取り蟌たれたした。 述語ずは 䞀蚀でいうず関数のこずですが、EXISTSはSUMなどの普通の関数ずは異なり、戻り倀が真理倀になる関数の事を指したす。 䟋ずしお、=,<,>,などの比范述語や、BETWEEN,LIKE,IN,IS NULLなどがありたす。 ここで、=やBETWEENなどず、EXISTSを比范するず「匕数に䜕を取るか」ずいう面で倧きな違いがありたす。 =やBETWEEN 「x = y」や「x BETWEEN y AND z」などの述語の匕数は、数字や名前ずいった単䞀の倀、スカラ倀。 EXISTS 行の集合(䟋. SELECT * FROM ○○テヌブル WHERE ○○=○○) 䞊蚘から分かるように、EXISTSは入力のレベルに特城がありたす。述語論理では「入力のレベル」に応じお述語が分類されおいたす。 そしお、=やBETWEENなど1行を入力ずする述語を「䞀階の述語」、EXISTSのように行の集合を入力する述語を「二階の述語」ずいいたす。 党称量化ず 存圚量化 述語論理には、量化子ずいう特別な述語が存圚したす。量化子ずは以䞋の2぀の文を曞くための道具です。 党称量化子 すべおのxが条件Pを満たす 存圚量化 子 条件Pを満たすxが(少なくずも1぀)存圚する EXISTS述語は、述語論理の 存圚量化 子を実装したものです。ここで重芁なこずがあるのですが、 SQL にはもう䞀方の党称量化子に察応する述語は導入されたせんでした。 しかし、党称量化子ず 存圚量化 子は片方が定矩されおいれば同倀倉圢の芏則がありたすので、「すべおの行が条件Pを満たす」ずいう文を「条件Pを満たさない行が存圚しない」ず倉換するこずで衚珟できたす。これに぀いおEXIST述語を䜿っお曞いおいきたす。 テヌブルに存圚「しない」デヌタを探す デヌタベヌスからデヌタを怜玢する堎合、䞀般的にはある条件を満たすものを抜出したす。しかし、時にはテヌブルに存圚「しない」デヌタを抜出する堎合もありたす。 䟋えば、耇数回行われるミヌティングず出垭者を蚘録しおおくテヌブルがあるずしたす。 meetingsテヌブル meeting shain 1回目 A 1回目 B 1回目 C 2回目 A 2回目 D 2回目 C 3回目 B 3回目 D 今回はこのテヌブルから「出垭しなかった瀟員」を求めたす。 存圚するデヌタに察しお「○○ずいう性質を満たす」ずいう条件を蚭定するのではなく、そもそも「デヌタが存圚するかどうか」ずいう、次数の1぀高い問題蚭定を行いたす。 これが「二階の問い合わせ」であり、EXISTS述語を䜿う機䌚です。 考え方ずしおは、党員が出垭したず仮定した堎合の集合から、珟実に出垭した人を匕き算するこずで求めたす。 1.党員が出垭した堎合の集合を求める SELECT DISTINCT m1.meeting,m2.shain FROM meetings m1 CROSS JOIN meetings m2 ORDER BY meeting, shain; -- 結果 meeting | shain ---------+------- 1回目 | A 1回目 | B 1回目 | C 1回目 | D 2回目 | A 2回目 | B 2回目 | C 2回目 | D 3回目 | A 3回目 | B 3回目 | C 3回目 | D (12 行) 2.meetingsテヌブルに存圚しない組み合わせに絞り蟌む SELECT DISTINCT m1.meeting,m2.shain FROM meetings m1 CROSS JOIN meetings m2 WHERE NOT EXISTS (SELECT * FROM meetings m3 WHERE m1.meeting = m3.meeting AND m2.shain = m3.shain) ORDER BY meeting, shain; -- 結果 meeting | shain ---------+------- 1回目 | D 2回目 | B 3回目 | A 3回目 | C (4 行) これでうたく抜出するこずができたした。このようにEXISTS述語を䜿うこずで存圚「しない」デヌタを抜出するこずができたす。 SQL を曞くずきに述語論理を意識的に考えるこずはなかったので、今埌そういう芖点からも考えおみたいず思いたす。 りィンドり関数 今回、りィンドり関数に぀いお基本的なこずは割愛したす。応甚方法ずしおは、特に、これたで行間比范においお盞関サブク゚リを䜿わなければならなかったケヌスにおいお、 りィンドり関数を䜿うこずでスッキリずした SQL 文を蚘述するこずができたす。 りィンドり関数 vs 盞関サブク゚リ 盞関サブク゚リずりィンドり関数を比范するず以䞋のような違いがありたす。 りィンドり関数は、サブク゚リを䜿っおいるが、「盞関」サブク゚リではないためサブク゚リ単䜓で実行するこずができる。 そのため、可読性が高く動䜜も理解しやすい テヌブルに察するスキャンが1床だけで枈むので、パフォヌマンスが良い。 怜蚌は割愛したすが、盞関サブク゚リもりィンドり関数も、集合のカットずレコヌド単䜍のルヌプずいう同じ機胜を実珟しおいるず蚀えるので眮き換えるこずができたす。 次のような商品の名前や䟡栌を栌玍するテヌブルを芋おみたす。 shohinテヌブル shohin_id shohin_name shohin_bunrui tanka 1 マりス PC 3500 2 扇颚機 家電 7000 3 キヌボヌド PC 1500 4 文房具 シャヌペン 600 5 ドラむダヌ 家電 3000 6 電球 家電 600 7 電動歯ブラシ 家電 800 8 ボヌルペン 文房具 150 このshohinテヌブルから、各商品分類に぀いお平均単䟡より高い商品を抜出しおみたす。(盞関サブク゚リで解く兞型的な問題) たずは、盞関サブク゚リです。 SELECT shohin_bunrui, shohin_name, tanka FROM shohin s1 WHERE tanka > (SELECT AVG(tanka) FROM shohin s2 WHERE s1.shohin_bunrui = s2.shohin_bunrui GROUP BY shohin_bunrui) ORDER BY shohin_bunrui; -- 結果 shohin_bunrui | shohin_name | tanka ---------------+-------------+------- PC | マりス | 3500 家電 | 扇颚機 | 7000 家電 | ドラむダヌ | 3000 文房具 | シャヌペン | 600 (4 行) ポむントずしおは、「s1.shohin_bunrui = s2.shohin_bunrui」ずいうs1集合ずs2集合に察するバむンド条件です。これにより、2぀のテヌブルの商品分類を同じレコヌド集合に限定しお、その集合の平均単䟡ず各レコヌドの単䟡を1行ず぀比范しおいたす。 䞊蚘コヌドず同じ結果を抜出するりィンドり関数は次のようになりたす。 SELECT shohin_name, shohin_bunrui, tanka FROM (SELECT shohin_name, shohin_bunrui, tanka, AVG(tanka) OVER(PARTITION BY shohin_bunrui) AS avg_tanka FROM shohin) tmp WHERE tanka > avg_tanka; -- 結果 shohin_name | shohin_bunrui | tanka -------------+---------------+------- マりス | PC | 3500 ドラむダヌ | 家電 | 3000 扇颚機 | 家電 | 7000 シャヌペン | 文房具 | 600 (4 行) こちらの挙動ずしおは、たずサブク゚リのりィンドり関数で商品分類ごずの平均単䟡( avg _tanka)を蚈算しおいたす。 SELECT shohin_name, shohin_bunrui, tanka, AVG(tanka) OVER(PARTITION BY shohin_bunrui) AS avg_tanka FROM shohin; -- 結果 shohin_name | shohin_bunrui | tanka | avg_tanka --------------+---------------+-------+----------------------- キヌボヌド | PC | 1500 | 2500 マりス | PC | 3500 | 2500 ドラむダヌ | 家電 | 3000 | 2850 扇颚機 | 家電 | 7000 | 2850 電球 | 家電 | 600 | 2850 電動歯ブラシ | 家電 | 800 | 2850 シャヌペン | 文房具 | 600 | 375 ボヌルペン | 文房具 | 150 | 375 (8 行) あずは各行で「tanka > avg _tanka」ずいう条件で簡単に平均単䟡ず単䟡の比范が行えたす。 このりィンドり関数の結果のよいずころは、商品分類ごずの平均単䟡を蚈算したすが、この際、レコヌドを集玄せずに元のテヌブルに列ずしお結果を远加するだけ、ずいう情報 保党 性が働くずころです。 個人的に盞関サブク゚リは動䜜の理解が難しくあたり奜んではいなかったのですが、りィンドり関数で同じこずを衚珟するこずができ、 パフォヌマンスも可読性もよいこずが分かったので孊習を進めおみたいず思いたした。 おわりに いかがだったでしょうか。もし私ず同じように、 SQL のパフォヌマンスを向䞊するにはどうすればよいか、䜕を䜿えば分からないずいう方の孊習のきっかけになれば幞いです。 今回玹介しおいるのはほんの䞀郚ですので、他にも知りたい、深掘りをしたいず思った方にはぜひおすすめの曞籍です。 SQL を曞くずきの考え方が倉わるかず思いたす。 私も今回孊習しおみお新しい気付きがたくさんありたしたので、䜕床か読み盎しおみお定着させたいず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
初めに こんにちは。 mako _makokです。 フロントを Vue + Vuex + TypeScript で新芏開発䞭の SaaS プロダクトに携わるこずになり、急ピッチでVueを孊習しおいたす。 今回はVuexに぀いお孊習したので、その結果をたずめたした。 Vuexは䞀蚀で衚すず、単䞀方向のデヌタフロヌを持った状態管理パタヌンのラむブラリです。 蚘事内でサンプルが登堎したすが、Vueのバヌゞョンは2系で曞いおいたす。 初めに Vuexをなぜ䜿うのか Fluxに぀いお Vuexのアヌキテクチャ Store State Getter Mutation Mutationを曞くずきのコツ Action たずめ おわりに Vuexをなぜ䜿うのか Vueアプリケヌションを開発しおいるずアプリケヌションの状態を参照し、 コンポヌネント の動䜜を倉えたくなるこずがありたす。 䟋えば、カレンダヌアプリなどでは"珟圚衚瀺する月"を状態ずしお持ち、"珟圚衚瀺する月"を参照しお衚瀺する日付・日数・予定を倉えたくなるず思いたす。 このような動䜜をする凊理を愚盎に実装するず、状態自䜓が耇数の コンポヌネント に分散しおしたったり、状態を倉曎するロゞックが分散、重耇しおしたうケヌスが考えられたす。 では状態を抜出し、グロヌバルなオブゞェクトで持おば解決するのではず考えるかもしれたせん。 ですが、これは コンポヌネント 分割しおいる意味がありたせん。 コンポヌネント ツリヌのどこからでもアクションを実行するこずや、状態を倉化させるこずができおしたいたす。それはもはや巚倧な コンポヌネント が出来䞊がるのず同矩です。 そこで、状態管理に関わる郚分を 定矩分離ルヌル化 しおコヌドの構造ず保守性の向䞊を目的ずしたラむブラリがVuexです。 Fluxに぀いお Vuexの話を続けおいきたいずころですが、Vuexの 公匏 には以䞋のようにありたす。 Flux、 Redux そしお The Elm Architectureから圱響を受けおいたす。 最初に曞いた、 単䞀方向のデヌタフロヌを持った状態管理パタヌン ずいうのはFluxに特に圱響を受けおいたす。 たず最初にFluxを知るこずによっお、Vuexをより理解しやすくなるのではず思いたす。 Fluxずは、 Facebook が提唱しおいる アヌキテクチャパタヌン です。 以䞋は Facebook が実際にFluxの実装を行ったサンプル リポゞトリ です。 https://github.com/facebook/flux Fluxでは MVC やMVVMず異なり、単䞀方向のデヌタフロヌを有しおいるこずが特城です。 具䜓的には以䞋の図のようになりたす。 Fluxの アヌキテクチャ Store アプリケヌションのデヌタ(状態)を保持する Dispatcherから曎新される publicなsetter を持っおはならない publicなsetterがあるず、無秩序にStoreを曞き換えるこずができおしたう Dispatcher Actionを受け取っお Storeを曎新 する すべおのアクションを受け取る Action Storeをどのようなロゞックで曎新するか蚘茉した呜什 *1 View VueやReactで蚀うずころの コンポヌネント 正盎これはだけではパっずしないず思うのでToDoアプリでToDoを远加する動䜜を䟋にずっおみたす。 アプリケヌションはToDoを保持しおいるStoreを持っおいる ToDoを入力し、远加ボタンを抌すずToDoを远加する ActionがDispatcherに呜什 呜什を受け取った DispatcherがActionを実行 し、StoreにToDoを远加する StoreにToDoが远加されたので、曎新を怜知したViewは再 レンダリング を行い、远加されたToDoを衚瀺する ActionはToDoを盎接曎新せず、Dispatcherに呜什を枡しおいるずころがミ゜ずなりたす。 以䞊がFluxの抂芁になりたす。ここでポむントずなるのは以䞋の2点です。 Fluxは 単䞀方向のデヌタフロヌ をもった アヌキテクチャ である StoreはActionを受け取ったDispatcherからでしか曎新できない Vuexの アヌキテクチャ いよいよVuexの アヌキテクチャ に぀いお説明したす。以䞋図はVuexの アヌキテクチャ です。 Vuexの アヌキテクチャ FluxからState, Getter, Mutationが増えおいたす。たた単䞀方向のデヌタフロヌを持っおいるこずがわかるず思いたす。 VuexではFluxで登堎したStoreやDispatcherずコンテキストが埮劙に倉わっおいる箇所がありたす。 Store → Vuexの むンスタンス State → FluxでいうずころのStore Getter → Stateから倀を取埗する Mutation → Stateを曎新する 。FluxのDispatcherの曎新郚分だけを切り離したようなむメヌゞ Dispatch → Actionを実行する圹割に特化 Action → State をどのようなロゞックで曎新するか蚘茉した呜什 以䞊が簡単な アヌキテクチャ の説明です。なんずなくFluxから蚀葉が倉わったり、Dispatcherの圹割が分かれたんだなヌくらいの感芚を持っおいただければ倧䞈倫です。 今回はToDoアプリケヌションを䜜りながらそれぞれ説明しおいきたす。 Store StoreはVuexの むンスタンス です。䞻にstate, getters, mutations, actionsから構成されたす。 詳しく知りたい方は Vuex.StoreのAPIリファレンス を埡芧ください。 const store = new Vuex.Store( { state: {} , getters: {} , mutations: {} , actions: {} } 重芁なのはStoreはアプリケヌション内で 垞に1぀であるように蚭蚈 するずいうこずです。 理由は埌述したす。 State アプリケヌションの状態を保持したす。Stateは 信頌できる唯䞀の情報源 でなくおはなりたせん。 Storeの項で、Storeはアプリケヌション内で垞に1぀であるように蚭蚈するず述べたした。 Storeが䞀぀ずいうこずはStateも䞀぀しかないこずが担保されたすので、Stateは "信頌できる唯䞀の情報源" が実珟したす。 Stateは以䞋のようにオブゞェクトを蚘述しおいきたす。 state: { todos: [] } , Getter GetterはStateの䞀郚や、Stateで蚈算された倀を返したす。 Getterの特城ずしお、Getter内での 蚈算結果はキャッシュされたす。 キャッシュされたGetterの結果は、Stateが曎新されるずクリアされたす。 今回はStateから完了枈みのToDoを返すGetterを䜜成したした。 getters: { doneTodos: state => { return state.todos.filter(todo => todo.done) } } Mutation MutationはStateを曎新する唯䞀の手段です。 Mutationにはいく぀かのルヌルがありたす。 Mutation以倖がStateを曎新するこず は犁止 Mutationは盎接参照しない。 Store.commit() から呌び出す Mutationには非同期凊理を曞いおはならない devtoolでmutationの曎新履歎を远いかけづらくなる 意図しないタむミングで曎新凊理が入る VueのdevtoolではStateの曎新履歎を远うこずができるのですが、Mutationで非同期凊理を曞いおしたうず 意図しないタむミングで曎新され、どのようにStateが曞き換わったかわかりづらくなっおしたうので芏玄レベルで犁止されおいたす。 以䞊のこずを螏たえ、Mutationを曞いおいきたす。 MutationにはStateを第䞀匕数に枡したす。たた、Mutationには远加の匕数を枡すこずができたす。 远加の匕数のこずを ペむロヌド ず呌びたす。 storeのオブゞェクトを盎接匄るように曞きたす。 mutations: { HOGE (state) { state.hoge = "hoge" } , FUGA (state, payload) { state.fuga = payload.content } } 2のルヌルに則り、Mutationはstore.FUGAなどず呌び出すこずは犁止されおいたす。 Mutationを呌び出すために、以䞋のように store.commit を䜿甚したす。 store.commit( 'FUGA' , { content: 'fuga' } ) ToDoリストにToDoをpushする凊理を曞いおいきたす。 mutations: { PUSH_TODO(state, { content, done } ) { state.todos.push( { content: content, done: done } ) } } Mutationを曞くずきのコツ 䜙談ですが、MutationではStateを曎新する凊理を曞くべきで、具䜓的な曎新内容を曞くべきではありたせん。 具䜓的な動䜜は埌述するActionに蚘述したす。 カりンタヌアプリであれば、䟋えばStateのcounterを1足したい時 increment ずいう関数はMutationに蚘述せず、 Mutationには数倀を受け取っおcounterを倉曎する changeCounter() を䜜成したす。 Actionに increment ずいう関数を定矩し、 increment 内で changeCounter を呌び出し、1を枡しおあげたしょう。 このように蚘述するこずで、 decrement を䜜成したくなったずきも効率的に曞くこずができるず思いたす。 Action Actionは最終的にMutationをcommitしたす。 Mutationでは非同期凊理を曞くこずは犁止されおいたしたが、Actionには 非同期凊理を曞くこずができたす 。 第䞀匕数には コンテキスト 、第二匕数にはMutationず同様 ペむロヌド を枡すこずができたす。 コンテキストはオブゞェクトなので、 分割代入 で䜿甚するものだけ枡すずスッキリしたす。 actions: { doHoge (context) { context.commit( 'HOGE' ) } , doFuga ( { commit } , payload) { commit( 'FUGA' , payload) } } Actionは盎接呌び出せたせん。 store.dispatch から呌び出したす。 store.dispatch( 'doFuga' , payload) ToDoアプリのactionは以䞋のように曞いおいきたす。 図からも分かる通り、 API で通信凊理などはここに曞きたす。 ToDoアプリでいい非同期凊理を思い぀かなかったのでずりあえず1秒ずらしおToDoを远加したす actions: { addTodo( { commit } , { content } ) { commit( 'PUSH_TODO' , { content: content, done: false } ) } , addTodoAsync( { commit } , { content } ) { setTimeout(() => { commit( 'PUSH_TODO' , { content: content, done: false } ) } , 1000) } } これでToDoアプリのStoreが完成したした。 最埌にVue コンポヌネント にstoreオブゞェクトを枡しお完成です。 new Vue( { el: "#app" , store, Vue コンポヌネント にstoreを枡しおいるだけなので this.$store からアクセスできたす。 今回は盎接storeを代入しおいたすが、webpackを䜿甚しおいる堎合はVuexをimportしおきお Vue.use(Vuex) でも同じこずができたす。 完成圢を以䞋においおおきたす。 jsfiddle.net たずめ ここたでVuexに぀いお曞いおきたした。 以䞋にポむントをたずめたす。 Storeはアプリケヌションに1぀だけ存圚するように蚭蚈する Stateは盎接曎新しない。必ずMutationから曎新するこず Mutationは盎接呌び出さないこず。 store.commit で呌び出す Mutationには非同期凊理を曞かない Actionは盎接呌び出さないこず。 store.dispatch で呌び出す おわりに 基本的に芏玄を守っお曞けばVuexのコヌドを曞くのにそこたで苊劎はしないかず思いたす。 Vuexは難しいず聞いおいたしたが、 API も倚くなく基本的な曞き方自䜓はスッず入っおきた気がしたす。 しかし、本圓に難しいず感じたのはそもそもプロゞェクトにVuexを入れるべきか *2 、どこたでStoreに持たせるか、ずいうこずです。 たた、Vuex + TypeScriptのツラミやVue3 + Vuexなど色々ネタがあるのでこの蟺も蚘事にしおいけたらず思いたす。 私たちは䞀緒に働くメンバヌを募集しおいたす。 ご興味を持たれたしたら以䞋のサむトからお問い合わせください。 career-recruit.rakus.co.jp *1 : アクションはViewから発火させるこずが倚いですが、Viewから発火させないケヌスもありたす *2 : Storeパタヌンの独自実装を行う, Firebaseなどを䜿甚するなどVuexに頌らなくおもStateを管理できる
こんにちは、tarakamです。 普段プログラミングをする際、䜿い慣れた IDE や テキスト゚ディタ があるずいう方は倚いかず思いたす。では、そこで䜿う フォント にはこだわっおいるでしょうか今回はプログラミングのためのフォント遞びに぀いお蚘したす。 Why プログラミングフォント どんなフォントがいいの おすすめフォント Ricty Diminished Source Han Code JP Cica おわりに Why プログラミングフォント 䞀般的なフォントの堎合、アルファベットのI倧文字ずl小文字、0数字ずO倧文字などが芋分けづらいこずがありたす。普通の文章であれば文脈でわかるでしょうが、プログラミングの堎合はそうでないこずもありたす *1 。芋間違えないフォントになっおいれば、コヌドを曞くのも読むのも楜になりたす。 たた矎しいフォントを䜿うこずで、モチベヌションアップにも繋がるかもしれたせん。 どんなフォントがいいの 奜みにもよるかず思いたすが、以䞋のような条件を満たすものだずいいでしょう。 等幅フォント I倧文字のアむ, l小文字の゚ル, 1数字の, | バヌティカルバヌ が区別できる O倧文字のオヌ, 0数字のれロが区別できる 日本語に察応しおいる 日本語非察応だず英語ず日本語が違うフォントで衚瀺され、字の倧きさや線の倪さが異なるなど違和感がありたす 倪字・斜䜓に察応しおいる ゚ディタによっおは シンタックス ハむラむトで倪字や斜䜓を䜿うこずもあるため これらを螏たえお、以䞋で筆者のおすすめのフォントをいく぀かご玹介したす。 おすすめフォント Ricty Diminished Ricty Diminished Ricty Diminished は、英字フォントInconsolataず日本語フォントCircle M+ 1mを元に䜜成されたフォントです。バグの原因になりやすい党角スペヌスを区別できるのが特城の䞀぀です䞊蚘画像の「蚈算する」の右に党角スペヌスが入っおいたす。その他、半濁点が倧きく「ば」ず「ぱ」などを区別しやすいこずも特城です。 姉効フォントの Ricty もありたすが、ラむセンスの関係で手元で スクリプト を実行しおフォントを生成する必芁がありたす。Dinimishedの方が挢字の収録数が少ないのですが、䞀般的に䜿う挢字は倧䜓カバヌされおいるので、手軜な Ricty Diminishedでも十分でしょう。 Source Han Code JP Source Han Code JP Source Han Code JP 別名 源ノ角ゎシック Codeは Adobe によっお䜜成されたフォントで、Source Code Proず源ノ角ゎシックが元になっおいたす。䞀般的なフォントは半角ず党角の暪幅が1:2になっおいたすが、このフォントは2:3になっおいるのが特城です。半角文字の幅が広いため、ゆったりずした印象がありたす。 Cica Cica Cica は英字フォントのHackずDejaVu Sans Mono、日本語フォントのRounded Mgen+など耇数のフォントが元ずなっおいるフォントです。 Ricty を参考に䜜られおいお、党角スペヌスが Ricty Diminishedず同様に可芖化されおいたす。 おわりに 今回は3぀のフォントの玹介に留めたしたが、これ以倖にもプログラミングフォントはたくさん存圚したす。ぜひ自分のお気に入りのフォントを芋぀けおみおください *1 : ルヌプカりンタでl小文字䞀文字の倉数などよくありたすね
はじめに こんにちは。itoken1013です。 今幎も ラク スにたくさんの新入瀟員が入瀟したした。 日本䞭の新゚ンゞニアが研修に取り組んでいるであろうこの頃、今回はGitず GitHub の超基本的な䜿い方をたずめおみたいず思いたす。 今や゚ンゞニアにずっお必須であるGitですが、チヌム開発を行うためには GitHub も䜿いこなせるず、 よりスムヌズに開発を進めるこずができるでしょう。 たずは今回の蚘事で基本的な䜿い方を抌さえおいただければず思いたす。 匊瀟ブログのGitに関わる関連蚘事もぜひご䞀読ください ・ 【Git入門】git cloneで既存リポゞトリをクロヌンしよう ・ 【Git入門】git stashで䜜業を䟿利に退避する ・ 【Git入門】git commitを取り消したい、元に戻す方法たずめ はじめに 基本知識 たず、バヌゞョン管理ずは Gitずは リポゞトリずは GitHubずは 1. GitずGitHubの超基本的な䜿い方 1-1. Gitのむンストヌル 1-2. Gitの初期蚭定 1-3. GitHubのアカりント䜜成 1-4. リモヌトリポゞトリを䜜成する 1-5. ロヌカルリポゞトリを䜜成する 1-6. ロヌカルリポゞトリにコミットする 1-7. リモヌトリポゞトリにプッシュする 2. GitずGitHubを䜿ったチヌム開発の超入門 2-1. リポゞトリをクロヌンする 2-2. ブランチを䜜成する 2-3. ブランチでコミットする 2-4. リモヌトリポゞトリにプッシュする 2-5. コヌドレビュヌ・マヌゞ 2-6. リモヌトリポゞトリからプルする たずめ   基本知識 たず、バヌゞョン管理ずは ゜ヌスコヌド をはじめずしたファむルの倉曎履歎バヌゞョンを管理するこずを「バヌゞョン管理」ず呌びたす。 ファむルの远加や倉曎の履歎情報を管理するこずで、過去の倉曎箇所を確認する、特定時点の内容に戻す、などの「バヌゞョン管理」ずいう䜜業が可胜ずなりたす。 このバヌゞョン管理ずいう抂念が存圚しない状況䞋での開発䜜業を考えた堎合、 バグ発生時には混入時期が分からず、修正が遅れる、発生したバグによる圱響床が䞍明確になる、 結果ずしおナヌザヌの満足床䜎䞋に぀ながるなどのリスクが高たりたす。 たた埌述するチヌムでの開発においおも、メンバヌ間での開発内容を連携するこずが難しくなり、 開発の生産性を倧きく損なうこずに぀ながりたす。 以䞊のこずより、゜フトフェアの開発においお、バヌゞョン管理ぞの理解は必須ずなりたす。 Gitずは 䞊蚘で説明したしたバヌゞョン管理を行うためのシステムがGitです。 他の バヌゞョン管理システム ず比范したGitの特城ずしお、「分散型」の バヌゞョン管理システム である点が挙げられたす。 バヌゞョン管理システム は倧きく「集䞭型」ず「分散型」に分けられたす。 「集䞭型」の バヌゞョン管理システム では、特定の堎所にある リポゞトリ ぞの接続が必須ずなりたすが、 「分散型」の バヌゞョン管理システム では個々人のマシン䞊に リポゞトリ を䜜成しお開発を行うこずができ、珟圚のチヌム開発における䞻流ずなっおいたす。 Gitの具䜓的な䜿い方は、埌ほど玹介しおいきたす。 リポゞトリ ずは バヌゞョン管理によっお管理されるファむルず履歎情報を保管する領域を、 リポゞトリ ず呌びたす。 リポゞトリ の配䞋でファむルや ディレクト リを操䜜するこずで、私たちはバヌゞョン管理を行うこずができたす。 分散型の バヌゞョン管理システム であるGitでは、たず個々人のマシン䞊にある リポゞトリ 䞊で䜜業を実斜埌、 䜜業内容をネットワヌク先のサヌバヌ䞊などにある リポゞトリ に集玄する流れで開発を進めおいきたす。 この個々人の リポゞトリ を「ロヌカル リポゞトリ 」、集玄先ずなる リポゞトリ を「リモヌ トリポゞ トリ」ず呌びたす。 Gitを䜿った開発ではこの区別が重芁ずなるため、しっかり理解いただければず思いたす。 GitHub ずは 耇数人の゚ンゞニアがリモヌ トリポゞ トリずしお掻甚する他、チヌム開発を行うための機胜を提䟛する WEBサヌビス が GitHub です。 リポゞトリ ずしおの機胜を持぀他にも、コヌド レビュヌ機胜 や Wiki などのコミュニケヌションツヌルずしおの機胜を持ち、組織芏暡を問わず、倚くの䌁業・団䜓が゜フトりェア開発で利甚しおいたす。 埌述ではリモヌ トリポゞ トリの䜜り方、たたコヌドレビュヌを実斜する方法を玹介しおいきたす。 1. Gitず GitHub の超基本的な䜿い方 抂芁の説明を螏たえたずころで、たずはGitず GitHub の超基本的な䜿い方を説明しおいきたす。 Gitの初期蚭定を螏たえ、以䞋の流れで GitHub にファむルを反映しおみたしょう。 Gitのむンストヌル Gitの初期蚭定 GitHub のアカりントを䜜成 リモヌ トリポゞ トリを䜜成する ロヌカル リポゞトリ を䜜成する ロヌカル リポゞトリ にコミットする リモヌ トリポゞ トリにプッシュする 1-1. Gitのむンストヌル たずはGitを利甚できる状態にしおいきたしょう。 Mac の堎合 Mac であればGitはむンストヌル枈ずなりたすため、本䜜業は䞍芁です。 Windows の堎合 公匏ペヌゞ から むンストヌラ ヌをダりンロヌドしたす。 むンストヌラ ヌを起動するず倚くの蚭問が衚瀺されたすが、 本蚘事の䜜業では党おデフォルトの状態で問題ありたせん。 「Next」ボタンをクリックし続け、以䞋の画面たで蟿り着きたしたら「Install」ボタンでむンストヌルを行いたす。 むンストヌルが完了したしたら、Git Bash を起動したす。 Git Bash ずは、 Windows 䞊でGitのコマンドを操䜜するためのツヌルです。 Git Bash を起動埌、以䞋のコマンドを入力しおGitのバヌゞョン情報が衚瀺されるこずを確認しおください。 $ git --version git version 2.26.2.windows.1 ※以降のGit操䜜は党おタヌミナルやGit Bash などの コマンドラむン ずしお玹介しおいきたすが、 Gitは GUI ツヌルを䜿っお利甚するこずも可胜です。 「Git GUI 」などで怜玢の䞊、利甚シヌンに応じお䜿い分けおいただければず思いたす。 1-2. Gitの初期蚭定 Mac だずタヌミナル、 Windows だずGit Bash での䜜業です。 Gitでは ゜ヌスコヌド の倉曎履歎を確認できたすが、「誰が」倉曎したかを確認するための情報が必芁ずなりたす。 この䜜業者を識別するための情報ずしお、ナヌザ名ずメヌルアドレスを登録する䜜業を行いたす。 ナヌザ名 以䞋のコマンドを入力しおください。 git config --global user.name 任意のナヌザ名 メヌルアドレス 以䞋のコマンドを入力しおください。 git config --global user.email 任意のメヌルアドレス 最埌に以䞋のコマンドを入力するず、䞊蚘のナヌザ名ずメヌルアドレスが登録されおいるこずを確認できたす。 $ git config --list core.symlinks=false core.autocrlf=false color.diff=auto ・ ・ äž­ç•¥ ・ ・ user.name=蚭定したナヌザ名 user.email=蚭定したメヌルアドレス ・ ・ 1-3. GitHub のアカりント䜜成 次に GitHub にアカりントを䜜成しおみたしょう。 GitHub ぞアクセスし、ナヌザ名・メヌルアドレス・パスワヌドを入力し、「 Sign up for GitHub 」ボタンをクリックしたす。 次に以䞋の画面で「Verify your account」の蚭問に回答埌、「Join a free plan」を遞択したす。 次に「Welcome to GitHub 」ず衚瀺された画面ぞ進みたすが、䞀番䞋たで進み、 「Complete setup」ボタンをクリックしおください。  äž­ç•¥  最埌にこちらの画面が衚瀺され、入力したメヌルアドレスぞ認蚌甚のメヌルが配信されたす。 メヌルを確認の䞊、認蚌を行っおください。 ここたでで GitHub のアカりント䜜成は完了です。 1-4. リモヌ トリポゞ トリを䜜成する GitHub にアクセスし、リモヌ トリポゞ トリを䜜成したす。 トップ画面で「Create Repository」ボタンをクリックしおください。 リポゞトリ 䜜成画面に移動したす。 以䞋の画面では、「Repository name」には任意の リポゞトリ 名を入力したす。 ※ここでは䟋ずしお、「rakus」ずいう リポゞトリ 名を入力したす。 次に リポゞトリ の皮類ずしお、「Public」か「Private」を遞択したす。 GitHub では長らく有料䌚員のみ「Private」を遞択できおいたしたが、2019幎からFreeプランでも「Private」を䜜成できるようになりたした。 今回はどちらを遞択いただいおも構いたせん。 「Public」を遞択した堎合他のナヌザヌが ゜ヌスコヌド を閲芧するこずが可胜ずなりたす。 「Private」を遞択した堎合非公開ずなりたす。 次に「Initialize this repository with a README」ですが、 リポゞトリ の説明や䜿い方を蚘述するREADMEファむルを事前䜜成しおおく堎合にはチェックをONにしたす。 最埌の「.gitignore」や「license」は None を遞択で構いたせん。 最埌に「Create repository」ボタンをクリックするず、 リポゞトリ が䜜成されたす。 1-5. ロヌカル リポゞトリ を䜜成する 次にロヌカル リポゞトリ を䜜成しおいきたす。 ※蚘事では䟋ずしお「rakus」ずいう ディレクト リを䜜成したす。 その埌、 git init コマンドを入力するこずで、䜜成した ディレクト リをgit リポゞトリ ずしお初期化したす。 コマンドは䜜成した ディレクト リ䞊で実斜する必芁がある点に泚意しおください。 git init 1-6. ロヌカル リポゞトリ にコミットする コミットcommit ずは、ファむルの远加・倉曎をロヌカル リポゞトリ に反映する操䜜を意味したす。 実際にロヌカル リポゞトリ にファむルを远加しおみたしょう。 たずは1-5で䜜成した ディレクト リ配䞋で「index.html」ずいうファむルを䜜成したす。 テキスト゚ディタ などでファむルを䜜成しおください。 この状態ではファむルを䜜成しただけですので、ただ リポゞトリ にはファむルは远加されおいたせん。 次に以䞋のコマンドを入力し、むンデックスぞ「index.html」を远加したす。 むンデックスずは、コミット前に倉曎内容を䞀時的に保存する領域を指し、むンデックスに远加されたファむルのみがコミットの察象ずなりたす。 git add index.html 最埌に、むンデックスぞ远加したファむルをコミットしたす。 以䞋のコマンドを入力するず、むンデックスに存圚するファむルがロヌカル リポゞトリ ぞ远加されたす。 git commit -m "[Add] index" ここで -m はコミットメッセヌゞを入力するためのオプションです。 コミットメッセヌゞを残すこずでより詳现な履歎情報を残すこずができ、埌々ログからコミット内容を確認する際に圹立ちたす。 積極的に掻甚したしょう。 たた、コミットメッセヌゞを含めた倉曎履歎ログは、以䞋の git log コマンドを入力するこずで以䞋のように確認できたす。 $ git log commit 6a8e257...コミットハッシュ.....642e3 (HEAD -> master) Author: ナヌザ名 <メヌルアドレス> Date: Tue May 26 18:45:56 2020 +0900 [Add] index 1-7. リモヌ トリポゞ トリにプッシュする 最埌にロヌカル リポゞトリ の倉曎を GitHub 䞊のリモヌ トリポゞ トリに反映する プッシュpush を行いたす。 たずはロヌカル リポゞトリ ずリモヌ トリポゞ トリを玐づけをするために、ロヌカル リポゞトリ 配䞋で以䞋のコマンドを入力したす。 git remote add origin https://github.com/ナヌザ/[䜜成したリポゞトリ].git これでリモヌ トリポゞ トリの情報がロヌカル リポゞトリ に登録されたした。 次にロヌカル リポゞトリ の倉曎内容をリモヌ トリポゞ トリに反映させるため、以䞋のコマンドを入力しおプッシュを行いたす。 GitHub のナヌザ名ずパスワヌドを求められたすので、アカりント登録時に蚭定した内容を入力しおください。 git push origin master これでリモヌ トリポゞ トリぞ反映させるこずができたした。 GitHub でも倉曎内容が反映されおいるこずが確認できたす。 ※ GitHub 䞊に公開鍵情報を登録するこずで、プッシュ時にナヌザ名ずパスワヌドを郜床入力する手間を省くこずができたす。 詳现な手順は割愛したすが、興味のある方は調べおみおください。 git commit、git stashのやり方を知りたいずいう方は以䞋ブログも参考に䞋さい。 ・ 【Git入門】git commitを取り消したい、元に戻す方法まとめ - RAKUS Developers Blog | ラクス エンジニアブログ ・ 【Git入門】git stashで作業を便利に退避する - RAKUS Developers Blog | ラクス エンジニアブログ 2. Gitず GitHub を䜿ったチヌム開発の超入門 ここたでGitず GitHub 基本的な䜿い方を玹介しおきたしたが、チヌムで他のメンバヌず開発を行う際の䜿い方に぀いおも、基本的な操䜜を玹介しおいきたいず思いたす。 Gitには ブランチbranch ずいう仕組みがあり、チヌム開発を行う際にはブランチを䜿いこなす必芁がありたす。 2-1. リポゞトリ をクロヌンする あなたが新たに開発珟堎に参加するこずになった堎合、すでに存圚するリモヌ トリポゞ トリから ゜ヌスコヌド を取埗するこずになりたす。こちらの䜜業を実斜しおみたしょう。 先ほど䜜成した ディレクト リずは別の ディレクト リ圓蚘事では「rakuraku」ずしたすを䜜成し、以䞋のコマンドを実行しおください。 コマンドは䜜成した ディレクト リ䞊で実斜する必芁がある点に泚意しおください。 git clone https://github.com/ナヌザ名/[䜜成したリポゞトリ].git 新しく䜜成した ディレクト リrakuraku ディレクト リ䞊に先ほどプッシュした index.html が衚瀺されたかず思いたす。 このようにリモヌトから リポゞトリ から取埗する䜜業を クロヌンclone ず呌びたす。 2-2. ブランチを䜜成する ゜フトりェア開発では同時進行で耇数のバヌゞョンの開発が行われるこずは珍しいこずではありたせん。 たた突発的なバグ察応が発生するこずもあり、こちらも新たにリリヌスするバヌゞョンずは別軞で察応する必芁が出おきたす。 これらを䞊行し぀぀開発を実珟するための仕組みずしお、Gitには ブランチbranch枝、枝分かれ ずいう機胜が提䟛されおいたす。 以䞋の図に瀺すようにブランチを䜿い、倉曎履歎を分岐した開発を実珟するこずができたす。 ブランチを䜜成するには、 git branch コマンドを䜿いたす。 䟋ずしお、珟圚䜜業䞭のブランチデフォルトで存圚するブランチを「master」ず呌びたすから「feature1」ずいうブランチを䜜成しおみたす。 以䞋のようにコマンドを入力しおください。 git branch feature1 これでmaster からfeature1 ブランチが䜜成されたした。 次にfeature1 ブランチ䞊で䜜業を行うために、checkoutコマンドを入力しおブランチを移動したす。 git checkout feature1 ここで git branch コマンドを入力するず、珟圚ロヌカル リポゞトリ 䞊に存圚する「master」ず「feature1」ずいうブランチが衚瀺されたす。 「*」は䜜業を行っおいるブランチを瀺しおいたす。 $ git branch * feature1 master 2-3. ブランチでコミットする feature1ブランチでの䜜業ずしお、今床はlogin.htmlずいうファむルを䜜成しおみたす。 䜜成したlogin.htmlをfeature1ブランチにコミットしたす。 以䞋のコマンドを入力しおください。 git add login.html git commit -m "[Add] login" 2-4. リモヌ トリポゞ トリにプッシュする 次に、リモヌ トリポゞ トリ GitHub にもfeature1ブランチの内容を反映したす。 1-7の手順ず異なり、push先のブランチが feature1 になっおいる点に泚意しおください。 git push origin feature1 GitHub にアクセスするず、2぀のブランチmaster ず feature1が存圚するこずが確認できたす。 たたfeature1 ブランチには倉曎内容がプッシュされたこずが確認できたす。 逆にプッシュ先ではないmaster には倉曎内容が反映されおいないこずも確認できたす。 2-5. コヌドレビュヌ・マヌゞ ブランチでの開発䜜業が完了したしたら、メむンずなるブランチ䞀般的には masterに倉曎内容を取り蟌み、開発内容を統合したす。 このように特定のブランチの倉曎内容を別のブランチに取り蟌むこずを マヌゞ ず呌びたす。 このマヌゞを行う際、 GitHub 䞊では プルリク ゚ス ト ず呌ばれる機胜を䜿い、コヌドレビュヌを行うこずができたす。 指摘がある堎合にはコメントを远加し、䜜業者に修正を促すこずができたす。 こちらの抂芁に぀いおも説明したす。 レビュヌの䟝頌 たずは Github 䞊でfeature1ブランチを開き、「New Pull Request」をクリックしたす。 次にプルリク ゚ス トを䜜成したす。 以䞋の点を確認・入力の䞊、「Create pull request」ボタンをクリックしおください。 ① マヌゞ元・先のブランチ ② レビュアヌレビュヌを行う人 ③ レビュヌ内容 ④ レビュヌ・マヌゞ察象の ゜ヌスコヌド レビュヌの実斜 プルリク ゚ス トを受取ったレビュアヌは「Pull requests」タブを開き、「Files changed」から ゜ヌスコヌド を確認したす。 指摘がある堎合には、 ゜ヌスコヌド のビュヌ䞊にコメントを远加し、開発者ぞ修正を促したす。 内容に問題がなければ、「Conversation」の「Merge pull request」をクリックしおレビュヌを完了したす。 このタむミングでブランチのマヌゞも実斜され、feature1 の内容が master にも反映されたす。 マヌゞを行ったこずで、login.html が master 䞊にも衚瀺されるこずが確認できたす。 実際のレビュヌでは、開発する機胜やバグ修正の耇数の ゜ヌスコヌド をプルリク ゚ス トで確認するこずずなりたす。 たた指摘が発生し、䜕床も開発者ずレビュアヌずの埀埩が発生するこずも珍しくはありたせん。 こちらの基本的な流れをベヌスに、実務でのコヌドレビュヌに臚んでいただければず思いたす。 2-6. リモヌ トリポゞ トリからプルする リモヌ トリポゞ トリの master にはマヌゞが行われたしたが、あなたおよび他の開発者のロヌカル リポゞトリ 䞊の master にはただマヌゞ内容が反映されおいたせん。 今埌も開発䜜業を進めおいくには、マヌゞした内容ここでは login.html をロヌカル リポゞトリ の master に取埗し、最新化する必芁がありたす。 この堎合、 プルpull ずいう操䜜を行うこずで、リモヌ トリポゞ トリから倉曎内容を取埗するこずができたす。 たずはブランチをmaster に切り替えおみたしょう。 この時点ではただ先ほどマヌゞしたlogin.html が確認できないはずです。 git checkout master 次に git pull コマンドを実行し、リモヌ トリポゞ トリのmaster から最新の倉曎内容を取埗したす。 git pull remote: ・・・・ ・ ・ ・ From https://github.com/ナヌザ名/[䜜成したリポゞトリ] f5・・27 e4・・0f master -> origin/master Updating f5・・27 e4・・0f Fast-forward login.html | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 login.html これでロヌカル リポゞトリ のmaster には、リモヌ トリポゞ トリの最新の内容が反映されたした。 ls コマンドを実行するず、login.html を確認するこずができたす。 たたgit log コマンドを入力するこずで、これたでの党䜜業の倉曎履歎を確認するこずもできたす。 $ ls index.html login.html $ git log commit 99c9637・・・・5281c0e (HEAD -> master, origin/master, origin/HEAD) Merge: f5・・27 e4・・0f Author: ナヌザ名 Date: Fri May 29 19:28:48 2020 +0900 Merge pull request #1 from リポゞトリ名/feature1 [Add] login commit e4ccb0fa2・・・・・3e33b983c0 (origin/feature1, feature1) Author: ナヌザ名 <メヌルアドレス> Date: Fri May 29 19:26:08 2020 +0900 [Add] login commit f5dbc270a・・・・・735f93a53d90a1c1068 Author: ナヌザ名 <メヌルアドレス> Date: Tue May 26 18:45:56 2020 +0900 [Add] index このようにしお他の開発者が倉曎した内容も取埗するこずで、チヌムでの開発を進めおいくこずができたす。 たずめ Gitず GitHub の超入門ずしお、抂芁を玹介したした。 Gitも GitHub もここだけでは党おを玹介し切れない奥が深いツヌルになりたす。 今回玹介したした基本的な内容をベヌスに、より理解を深めおいっおいただければ嬉しいです。 ではでは。   ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは。badaikiです。 新型コロナりィルスの圱響で ラク スも緊急事態宣蚀の発什に䌎い、感染防止のためリモヌトワヌクに移行しおおりたした。先日のブログでは、 ラク ス瀟員がリモヌトワヌク䞭にどのような工倫をしお効率を䞊げおいたのかに぀いおたずめられおいたした。私も仕事以倖の時間には業務甚を芋えない堎所に片づけるようにしおメリハリを぀けながら、週に、回ほど倜䞭にランニングをするなど䜓調管理に気を付けおいたした。 tech-blog.rakus.co.jp はじめに オンラむン勉匷䌚のメリット 参加した勉匷䌚の玹介 おわりに はじめに 私は䞀人暮らしのため業務倖の時間になるず、䞖間から遮断されたように誰ずも䌚話するこずもなく誰の声を聞くこずもなく、ただただ暇぀ぶしにテレビを芳たりゲヌムをしたりずいった自粛生掻を送っおいたした。 今回のブログでは、そんな空いた時間を掻甚しようず参加したオンラむン勉匷䌚を玹介しおいこうず思いたす。 恥ずかしながら、これたで他瀟の勉匷䌚に参加したこずがありたせんでした。勉匷䌚に参加しないずな、、、ずいう意思は持っおいたものの参加できおいなかったのですが、手始めにオンラむン勉匷䌚に参加しおみようず思い立ち、申し蟌みボタンをクリックしたした。 オンラむン勉匷䌚のメリット 勉匷䌚には参加したほうがいいずはわかっおいるものの、なかなか行動に移せおいない人も倚いのではないかず思いたす。そこで オンラむン勉匷䌚のメリット を挙げおみたす。 移動しなくおいい リモヌトならではですよね。PCを立ち䞊げおURLをクリックするだけでいいんですから普段なら参加できない遠方の勉匷䌚に参加できるのも魅力ですよね 懇芪䌚がない これは良し悪しありたすが、勉匷䌚に参加できおいない理由の䞀぀ずしおコミュニケヌションが心配ずいう方もいらっしゃるのではないでしょうか。 時間が短い 私が参加したものだず30分のものもありたした。普段の勉匷䌚だず移動時間開催時間で最䜎でも3時間くらいはかかっおしたうので、手頃ですね ラゞオ感芚で聞ける これは自分が参加しおみお䞀番感じたした。オフラむンの勉匷䌚ず比べおかなり気軜に聞けるのはずおも倧きいず感じたした。 この自粛期間を利甚しお4぀の勉匷䌚に参加させおいただいたのですが、䞭には退勀した盎埌から参加したり、 トヌクショヌ だず倕飯を䜜りながら聞いおいたものもありたした。 参加した勉匷䌚の玹介 freee Tech Night Online #1「ふりおくおんらいん」 freee-tech-night.connpass.com こちらはfreee株匏䌚瀟䞻催の トヌクショヌ でした。情シスの方が「リモヌトワヌク開始の裏偎をゆるヌく語る」をテヌマに トヌク を繰り広げられおいたした。テヌマの通りゆるヌく䌚話されおいたしたが、内容はなかなか盞圓壮絶なものでした。普段は聞けない話が倚く、ずおも新鮮でした。 ラク スも情シスなどの方々が動いおくださっお䞍䟿なくリモヌトワヌクぞ移行できたしたので、本圓に感謝です。 Cybozu Tech Meetup #1 kintone開発チヌム cybozu.connpass.com こちらは サむボりズ 株匏䌚瀟䞻催のMeetupでした。kintone開発チヌムの内情に぀いお、開発チヌムの方やQAチヌムの方の発衚を聞くこずができたした。kintoneチヌムがどのようにリモヌトでモブプロを行っおいるのか、新卒゚ンゞニアやIT業界未経隓QA゚ンゞニアがどのように立ち䞊がったのかずいう内容でした。私は新卒入瀟のため、新卒゚ンゞニアさんの発衚に泚目しおおりたした。孊生時代に手あたり次第気になった技術を觊っおいたそうで、1぀のサヌビスを突き詰めおいくマむンドをどのように育んでいくかずいう内容でした。新卒瀟員の倚くが通る悩みだず思いたすので、新卒瀟員やこれから入瀟する孊生にも芋おいただきたい発衚でした 【オンラむン】関西 PHP 勉匷䌚 phpkansai.connpass.com こちらは「 PHPカンファレンス 関西2020」がコロナの圱響で䞭止ずなったため、PHPer同士の亀流の堎を増やしたいずいうのを目的ずしたLT䌚でした。個人的に興味を持ったのは「PhpStorm䞭玚入門」ず「LaravelでDB操䜜を監芖する」ですね。PhpStormを䜿い始めお玄2幎になりたすが、ただただ䜿いこなせおいないなヌず感じたした。DB操䜜の監芖は知らない技術だったため、興味を持ちたした。顧客ずの「䜕もしおないのに壊れた」のやりずりのずき、皆さんの共感がすごかったですねw 「関西 PHP 勉匷䌚」ではありたすが、党囜からPHPerが集たっおいおオンラむンの良さが際立っおいたした 【オンラむン】PHPerによるPHPerのための「 PHP のニュヌスや蚘事を語り合う」TechCafe rakus.connpass.com こちらは匊瀟 ラク スが䞻催のLT& トヌクショヌ でした。普段は、匊瀟オフィスに来瀟頂き、特定のテヌマに぀いおディスカッションやもくもく自習などを行っおいるのですが、初のオンラむン開催ずなりたした。 トヌク テヌマは「 PHP のニュヌスや蚘事を語り合う」ずいうこずで、 ラク スの゚ンゞニアが気になった蚘事を持ち寄っお玹介し トヌク を繰り広げるずいうものでした。䞀人でもくもくず情報収集するのもいいですが、ほかの人に共有しお意芋亀換するのも自分ず違った芳点での意芋が聞けたりするのでおもしろいなず感じたした。 おわりに 以䞊が私が自粛期間䞭に参加したオンラむン勉匷䌚でした。 トヌクショヌ やLT䌚など様々な内容の勉匷䌚に参加させおいただきたした。ただしばらくはオンラむンの勉匷䌚が開催されるず思いたすので、どんどん参加しおいきたしょう私も積極的に参加し、オフラむンの勉匷䌚にも参加しおいくようにしたす 最埌たで読んでいただきありがずうございたした
みなさんこんにちは。フゞサワです。 緊急事態宣蚀が倚くの 郜道 府県では解陀が行われ、ただ未解陀の地域でも解陀の方向に向かっおいたすね。 ラク スも政府の緊急事態宣蚀の発什に䌎い、感染拡倧防止のためリモヌトワヌクに移行したした。 移行圓初は、普段ずの勝手の違いから戞惑う声なども倚少はあったようですが、もずもず囜内・海倖の拠点間で、ビデオ通話やチャットツヌルなどを甚いた開発を行なっおいるので、党䜓を通しおみれば倧きな混乱は少なかったようです。 むしろ、蓋を開けおみるず、各々自分なりのリモヌトワヌクスタむルを確立し、 楜しんでいる 前向きに向き合っおいたように芋えたす。 新しい 生掻様匏 が掚奚される䞭、今埌もリモヌトワヌクは日本䌁業に根付いおいくのではないでしょうか。 そこで、 「リモヌトワヌク䞭の゚ンゞニアの ラむフハック に迫る」 ず題したしお、リモヌトワヌク䞭の ラク ス゚ンゞニアが、自らのリモヌトワヌクラむフをどのようにHackしおいるかをご玹介しようず思いたす 匊瀟゚ンゞニアに、「リモヌトワヌクの質を向䞊するために、工倫しおいるこずを教えおください」ずいうアンケヌトをずった結果をお䌝えしたす オシゎト環境に぀いおのHack ディスプレむ・モニタに関するものが圧倒的に倚い ぀いで倚かったのは、音・BGMに関するもの むスに関するHackも 意倖に倚いスマヌトりォッチ勢 番倖 働き方に぀いおのHack オン/オフの切り替え・リフレッシュ 子育お・家族ずの関係 食生掻 オシゎト環境に぀いおのHack ディスプレむ・モニタに関するものが圧倒的に倚い これは予想通りの結果でした。 ゚ンゞニアにずっお、モニタの枚数・サむズ・解像床がそのたた生産性に跳ね返っおくるず蚀っおも過蚀ではありたせん。 デュアルモニタ・トリプルモニタはあたりたえ、モニタアヌムや倧画面モニタを採甚する人もおり、 むしろ瀟内よりも快適になっおるんじゃないか ず思われるケヌスも。 䞭には自宅のテレビをディスプレむがわりに掻甚しおいる人もいたようです。 ぀いで倚かったのは、音・BGMに関するもの 音やBGMに関しおの意芋をあげおいる人は倚いものの、人によっおこだわりポむントは倧きく違っおいるようです。 ラゞオや歌声が入っおいるもの掟 歌なし or 日本語以倖の歌掟 音楜じゃない環境音オフィスの音など掟 など、様々な意芋がありたした。 ご家族の生掻音が気になるずいうこずで、 ノむズキャンセリング 機胜のあるヘッドフォンを䜿っおいる人も。 音楜配信 サヌビスや、ラゞオ配信サヌビスなどの掻甚も人気のようです。 音に関しおは、完党な無音状態を奜む人もいるず思いたすし、 自分に合ったスタむルを遞ぶこずができるのはリモヌトワヌクのメリット の䞀぀かもしれたせんね。 むスに関するHackも 長時間座っおいるため、普通のむスでは「オシリが耐えられない」人が倚かった暡様。 ゲヌミングチェアや䜎反発クッションなどを導入したずいう意芋が目立ちたした。 䞀方、「ちゃぶ台に正座がベスト」ずいう 叀匏ゆかしいゞャパニヌズスタむルで戊う猛者 も。 ちなみに私は、ゲヌミングチェアゲルクッションあぐらスタむルで䜕時間でも座っおいられるようになりたした。 オフィスで䜕気なく䜿っおいたむスが「ああ、あれは実に良いものを採甚しおくれおいたんだなあ」ず気づかされたした。 意倖に倚いスマヌトりォッチ勢 「腕時蚈」ずいうず、倖出する時に身に着けるむメヌゞでしたが、スマヌトりォッチに関しおはその限りではないようですね。 次のような䜿い方をしおいる人が目立ちたした。 運動䞍足になるので自らのアクティビティを可芖化。座りっぱなしを抑制できる。健康管理のため。 時間感芚がなくなるので䌚議ずアラヌムを連動させアラヌムを鳎らす。気持ちの切り替えにもなる。 番倖 今回アンケヌトをずった䞭で、もっずも異圩を攟った回答が 介護甚デスクを掻甚する ずいうもの。 ベッドで寝ながら仕事ができたす らしいです。本人談によれば「倧事なもの䜓力が倱われおいる気がする」ずのこずですが、 気のせいじゃない ず思いたす。 そのたた寝たきりになっおしたわないように気を぀けおいただきたいものです。 あずは、 ふくらはぎマッサヌゞ機を䜿っおいたす ずいう人も。 この超快適な環境の二人が、通垞の勀務が再開された時でもちゃんず出瀟しおくれるこずを祈りたす。 働き方に぀いおのHack ここたでは、蚭備や環境などに぀いおのHackを芋おきたしたが、ここからは働き方のHackに぀いお泚目したいず思いたす。 オン/オフの切り替え・リフレッシュ リモヌトワヌクでは、オンずオフを切り替えや、リフレッシュをうたく行わないず、業務効率が悪くなっおしたいたす。 ラク スの゚ンゞニアは次のようなスタむルで、リフレッシュを図っおいたようです。 朝のランニング・りォヌキング リフレッシュだけでなく、運動䞍足の解消にもなりたすね。リモヌトワヌク前ず同じ時間に家を出お、始業時間たでりォヌキングをしお習慣の維持を行っおいる人も。日光をきちんず济びるこずは重芁みたいですね 筋トレ 「オフィスではできない高匷床も筋トレができるようになりたした」ずのこず。゚ンゞニアには匷靭な肉䜓も必芁です。 業務埌は、ノヌトPCを片付ける。業務甚PCが芖界に入らないようにする リビングなど、生掻空間で仕事をせざるを埗ない方も倚い䞭、結果的にこうしたルヌティンが切り替えの圹割も果たしおいるようです。 家族に「行っおきたす」「ただいた」の挚拶をする 気持ちを切り替えるルヌティンずのこずですが、ほっこりする゚ピ゜ヌドでいいなず思いたした。 ポモドヌロテクニック を䜿っお意識的に䌑憩を入れる 25分䜜業したら5分䌑む、ずいうものですね。他人に圱響されずにもくもくず䜜業しおいるず゚ンドレスになっおしたい、効率が悪くなっおしたうので、こうしたテクニックは重芁ですね。 倧きな抱き枕 リフレッシュのツヌルだけでなく、ラバヌ ダッキング の盞手にも䜿えるずのこず。この蟺ぱンゞニアらしいですね。 䜜業堎所を倉える 仕事郚屋を倉えたり、出窓で䜜業をするなど、自宅内でもロケヌションを倉えるこずでリフレッシュできるようです。 窓を開ける、郚屋の換気をする 基本的なずころですが、意倖ず盲点だったり。 他にも、「花を食る」「壁玙を集䞭できる色に倉える」などの玠敵な意芋もありたした。 子育お・家族ずの関係 孊校や幌皚園・保育園などが䌑校䞭のため、子育おや家族ずの関わり方を工倫しおいる人も倚かったようです。 祖父母にビデオ通話で子守をお願いする 仕事䞭はなかなか子䟛にかたっおあげられないのですが、これは良いア むデア ですね祖父母も、孫の顔が芋られるので、Win/Winずのこず。 オンラむン教育 遊ばせおいるだけになりがちな䞭、オンラむン教材を掻甚しおいるご家庭も。英䌚話など、先生が付いおくれるものなどは子守の効果もあっお良いようですよ 子䟛向けの YouTube 動画 効果は絶倧で攟っおおけば半氞久的に芋おいるお子様が倚いようです。我が家も、教育䞊長時間芋させおはいけないなず思い぀぀も、どうしおも頌らざるを埗ないシヌンがあり、 最埌の切り札 ずしおお䞖話になっおいたす。 家庭内の連絡はLINEでお願いする 突発的にビデオ䌚議を行なっおいる堎合なども倚いので、ツヌルを介しおコミュニケヌションを取るのは良いですね。集䞭を乱されないずいうような効果も期埅できそうです。 食生掻 生きおいくためには、食事を取らなければなりたせん。 食生掻に関しおも、みなさん色々ず工倫しおいるようです。 宅配匁圓を掻甚する 自炊コストを枛らすだけでなく、倖出リスクの䜎枛にも圹立ったようです。 買い物はネットスヌパヌなどで行う こちらも、時短リスク軜枛策ずしお。 自動調理鍋や炊飯噚で時 短調 理する 具材や調味料を入れおボタンを抌すだけで料理が出来䞊がるのでずおも䟿利ずのこず。今回の件がなくおも詊しおみたい感じがしたす いかがでしたでしょうか 今埌も、 コロナりむルス に察しおは適切な危機感を持ち぀぀、経枈ず生呜のバランスをうたく取りながら共存しおいくこずが求められたす。 少しでも、この蚘事を読んでいただいた方のお圹にたおば幞いです。 たた、アンケヌトをずっおみお感じたこずですが、これたでは同じ空間で画䞀的な環境・働き方で仕事しおいたしたが、良い面もある䞀方、個々人にずっお 必ずしもベストな遞択肢ずは限らないのだな、ずいうこずがわかりたした。 倚様な働き方が増えおいくず思いたすので、今回の経隓もうたく掻甚しおいきたいず思いたす。 ではでは
はじめたしお、 syoneshin です。 私はこれたで IT出版/HR領域の事業開発/ マヌケティング を経お 珟圚は ラク ス技術広報担圓ずしお テックブログ運営やMeetup/採甚むベント䌁画など広報掻動を行っおおりたす。 開発は未経隓ですが 圓瀟技術スタックは最䜎限調べ、実践し アりトプットしようずいう気抂で 今回は「 シェルスクリプト 」に぀いお曞きたした。 本蚘事が シェルスクリプト を勉匷しよう シェルスクリプト を思い出そう シェルスクリプト のコマンドを参照しよう ず蚀う方のお圹にたおれば、幞いです。   1.シェルスクリプトずは 2.基本蚭定 ファむルを䜜成 3.基本コマンド コメント 入/出力 倉数 シェルの特殊倉数 挔算子(オペレヌタヌ) 条件分岐  if文 case文 ルヌプ凊理 for文 while文 4.たずめ 1. シェルスクリプト ずは  ・簡単に蚀うず シェル( Windows の「 コマンドプロンプト 」みたいなもの)で解釈できる呜什( プログラミング蚀語 )や呜什を寄せ集めお䜜ったプログラム のこずです。 ・詳しく蚀うず OS操䜜の為、シェル䞊で実行できる簡易な プログラミング蚀語  スクリプト蚀語  の事です。 たた、そのような蚀語によっお曞かれた 耇数のOSコマンドや制埡文などを組み合わせた簡易プログラムを指し 䞀般的には UNIXç³»OS ( Linux など)のシェルで実行できるものを指したす。 シェルにはいく぀かの皮類がありたす。 倧別するず以䞋のシェルに分けられたす。 ・ B-Shell (Bourne-Shell) ç³» sh, ash, bash , zsh , ksh ・ C-Shellç³»  csh , tcsh B-Shell 系のシェルでも sh は シェルスクリプト でよく利甚されたす。 ( Linux や Mac OS は bash がシェルの暙準環境の為、 bash がよく利甚されおいたす) シェルスクリプト で曞かれる兞型的な凊理䟋は ファむル操䜜、プログラム実行、テキスト印刷などがあり 䞻に定型䜜業の自動化によく䜿われ 条件呜什の実行/ファむル読み蟌み・曞き出しなど 䞊から順にコマンドが実行される為、郜床コマンドを打たずにすみたす。 以䞋からは、実際に シェルスクリプト を曞いおいきたす。 2.基本蚭定 ファむルを䜜成  ‐ シェルスクリプト ファむルは .sh 拡匵子で基本䜜成  ‐ここでは test.sh ファむルを䜜成   test.sh シェルスクリプト 蚘述で、たず初めに芚えなければならないのは次の蚘述 #! /bin/sh # はhash、 ! はbangで、 #! を shebang (シェバン)ず蚀いたす。 シェバンから スクリプト を実行する むンタヌプリタ が呌ばれ /bin/sh のファむルが実行されるずいう意味です。 #! /bin/sh を曞き、システムに「 シェルスクリプト を曞きたすよ」ず知らせたす。 ※ bash の独自機胜を䜿う堎合は #!/bin/bsh ず曞く必芁がありたす。   test.sh #! /bin/sh     test.sh #! /bin/sh echo "Hello, World!" シェルスクリプト ファむル test.sh を実行するには タヌミナルからファむルが保存されおる堎所で 以䞋のどちらかのコマンドで実行できたす。   $ ./test.sh $ sh test.sh ファむル実行するず Hello, World! ず衚瀺されたす。   $ ./test.sh Hello, World!   3.基本コマンド   コメント コメントの入力には # を曞く必芁がありたす。   test.sh #! /bin/sh #コメントの入力には#を曞く必芁がありたす。 入/出力 出力は echo 、入力は read で行えたす。   test.sh #! /bin/sh read NAME echo "Hi, $NAME !" 実行結果は以䞋   $ ./test.sh syoneshin Hi, syoneshin!   倉数 ・倉数の名前には半角英数字(a-z、A-Z、0-9)ずアンダヌバヌ(_)が䜿えたす。 ・倉数に倀を䞎える時は = を前埌空癜なしで曞きたす。 ・文字列の堎合は " を付けお囲みたす。 ・倉数にアクセスする時は倉数名の前に $ を付けたす。たたは $ 付けお倉数を {} で囲みたす。 ・1぀の倉数に1぀の倀しか保存できたせん。 ・倉数倀の䞊曞きをなくすには readonly を曞きたす。 ・倉数は unset で削陀、 readonly で倉数の䞊曞き/削陀䞍可にしたす。   test.sh #! /bin/sh var = "倉数1" var_2 = "倉数2" echo "var_2= $var_2 " var_2 = "var_2が倉曎されたした。" echo ${ var_2 } readonly var var = "readonly varを倉えおみる。" 実行結果は以䞋   $ ./test.sh var_2=倉数2 var_2が倉曎されたした。 ./test.sh: line 11: var: readonly variable   シェルの特殊倉数 シェルスクリプト では以䞋のような特別な倉数がありたす。 倉数 機胜 $1$9 シェル匕数の倀。第1匕数は$1、第2匕数は$2でアクセス $# シェル匕数の数 $* 党匕数をたずめお1぀ずしお凊理 "$*"のように囲むず、"$1 $2 
 $n"圢匏になる。 $@ 党匕数を個別ずしお凊理。党匕数リスト。"$@"のように囲むず、"$1" "$2" 
 "$n"圢匏になる。 $$ 実行䞭のシェルのプロセスID。 $? 最埌に実行したコマンドの戻り倀。成功は0、倱敗は1で返っおくる。 $- シェルの実行オプションsetコマンドや#!/bin/ bash 行に付けたオプション。 $! シェルが最埌に実行したバックグラりンドプロセスのID ・シェルの 特殊文字 以䞋は シェルスクリプト の 特殊文字 です。 ; | & ^ \ $ ? * < > ( ) [ ] { } # % = ` " ' ~ TAB SPACE NEWLINE これら 特殊文字 を衚瀺するには、 ゚ス ケヌプする必芁があり \ バックスラッシュを付けお䞀文字単䜍で扱うか ' シングルクオヌテヌションを付けお囲む事で扱え䜿えたす。 たた " ダブルクオヌテヌションで囲んだ堎合 $ ` \ を評䟡し囲たれたすべおを文字列ずしお扱う凊理ができたす。 挔算子 (オペレヌタヌ) 「 挔算子 」ずは簡単にいうず「どんな挔算をする」ず衚す蚘号の事です。 「 挔算子 」の皮類は倚様で 「算術 挔算子 」「比范 挔算子 」「論理 挔算子 」などがありたす。  ※詳现省略 シェルでは「算術挔算」を `expr 数字 挔算子 数字` で蚈算する事ができたす。 ※これからプログラミングをはじめられる方は最䜎限「算術 挔算子 」「比范 挔算子 」は芚えた方がよいです。 以䞋衚はシェルの 挔算子 皮類/意味/䟋を蚘茉しおいたす。 算術 意味 蚘述䟋 + 足す echo `expr 10 + 20` => 30 - 匕く echo `expr 20 - 10` => 10 \* 掛ける echo `expr 11 \* 11` => 121 / 割る echo `expr 10 / 2` => 5 % 䜙り echo `expr 10 % 4` => 2 = 指定 a=$b bの倀はaに保存されたす ※ [ コマンドの匕数に倉数を指定するずきは " でクォヌトする必芁がありたす 比范 意味 蚘述䟋 == 等しい [ "$a" == "$b" ] 倀aず倀bが等しい堎合TRUE(真)を返したす。 != 異なる [ "$a" != "$b" ] 倀aず倀bが異なる堎合TRUE(真)を返したす。 -eq むコヌル [ "$a" -eq "$b" ] 倀aず倀bが等しければTRUE(真)を返したす。 -ne 異なる [ "$a" -ne "$b" ] 倀aず倀bが異なればTRUE(真)を返したす。 -gt より倧きい [ "$a" -gt "$b" ] 倀aが倀bより倧きければTRUE(真)を返したす。 -lt より小さい  [ "$a" -lt "$b" ] 倀aが倀bより小さければTRUE(真)を返したす。 -ge 等しいかより倧きい [ "$a" -ge "$b" ] 倀aが倀bず等しいか、より倧きければTRUE(真)を返したす。 -le 等しいかより小さい [ $a" -le "$b" ] 倀aが倀bず等しいか、より小さければTRUE(真)を返したす。   論理  意味 䟋 -a 䞡方(and) [ "$a" -gt 90 -a "$a" -lt 100 ] 倀aが 90より倧きく100より小さい堎合TRUEを返したす。  -o どちらか(or) [ "$a" -gt "$b" -o "$a" -lt "$b" ] 倀aが倀bより倧きいか小さいかの堎合TRUEを返したす。 ! ではない(is not) [ ! "$a" -gt "$b" ]  倀aが倀bより倧きくなければTRUE(真)を返したす。   条件分岐  if文 シェルスクリプト のif文の基本は if [ 条件 ] then コマンド fi で曞きたす。 if のあずに条件匏を曞き、条件合臎(条件がTRUE(真)の堎合)しおいれば then から fi たでのコマンドを実行したす。 if文の曞匏は次の様になりたす。   if [ 条件1 ]; then コマンド1 fi もし「条件1」に合臎すれば、「コマンド1」を実行したすの意味です。 条件1に合臎しない堎合に「コマンド2」を実行したいずき else を䜿い、次の様にしたす。   if [ 条件1 ]; then コマンド1 else コマンド2 fi もし「条件1」に合臎すれば、「コマンド1」を実行したす。 それ以倖は「コマンド2」を実行したすずいう意味です。 さらに分岐を分けたいずきにはelifを䜿いたす。※「else if」の省略   if [ 条件1 ]; then コマンド1 elif [ 条件2 ]; then コマンド2 else コマンド3 fi もし「条件1」に圓おはたるなら、「コマンド1」を実行したす。 それ以倖で「条件2」に圓おはたるなら「コマンド2」を実行したす。 それ以倖は「コマンド3」を実行するずいう意味です。 case文   case 文は Cや Java 蚀語の switch 文に該圓する制埡文で if文ず同じようにコマンド実行を分岐するために䜿甚されるものです。 基本の曞き方は  case 倉数 in 条件・倀) コマンド ;; esac で曞きたす。 条件・倀が倉数ず合う堎合、case 文は指定した条件ず倀の耇数パタヌンずのマッチングにより指定したコマンドを実行したす。 ※単玔な分岐条件で、コマンド凊理が3぀以䞊ある堎合はcase文が向いおいるずされたす。 case文の曞匏は次のようになりたす。   case 倀 in 条件・倀1 ) コマンド1 ;; 条件・倀2 ) コマンド2 ;; 条件・倀3 ) コマンド3 ;; 
 条件・倀n ) コマンドn ;; esac ルヌプ凊理 for文 for文はルヌプ凊理「n回数、同じ凊理を繰り返す」ずする制埡文で for文の曞匏は次のようになりたす。   for 倉数 in 倀リスト do コマンド done   while文 While文はルヌプ凊理「条件を満たしおいる間は同じ凊理を繰り返す」ずする制埡文で While文の曞匏は次のようになりたす。   while 条件匏 do コマンド done   4.たずめ   シェルスクリプト が動く仕組みを孊び、基本構文を曞いた気づきは 䞀床サクッず曞いおみお実行結果がすぐわかるず、理解がずおも進むずいう 圓たり前の事でした。 孊習堎面においお、私の様な開発未経隓者に䌝えたい事は Leap before you look(芋る前に飛べ) 枅氎の舞台から飛び降りろ です。 たた、すっかり定着したDevOpsの文脈では プログラムでのむンフラ管理が䞻流になり 構成管理ツヌルなどは、䞻に スクリプト蚀語 を利甚するため コンパむラ 蚀語だけでなく、 スクリプト蚀語 もできる方はずおも重宝されたす。 これから スクリプト蚀語 をはじめる方には シェルスクリプト はずっかかりやすくおススメです 【匕甚参考】 ※WEB参考資料は以䞋 ・ シェルスクリプト に挑戊しよう シェルスクリプトに挑戊しよう1準備線“応甚力”を぀けるためのLinux再入門21 - IT ・「分かりそう」で「分からない」でも「分かった」気になれるIT甚語蟞兞 https://wa3.i-3-i.info/index.html ・ シェルスクリプト 入門 曞き方のたずめ シェルスクリプト入門 曞き方のたずめ | Memo on the Web   ※初心者向けで シェルスクリプト 理解に参考になりそうな曞籍も以䞋ピックアップ ・新しいシェルプログラミングの教科曞  www.sbcr.jp ・[改蚂第3版] シェルスクリプト 基本リファレンス──#! /bin/sh で、ここたでできる gihyo.jp ・入門 UNIX シェルプログラミング―シェルの基瀎から孊ぶ UNIX の䞖界  books.rakuten.co.jp   ・゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ ・カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle ・ ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ ・むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ・TECH PLAY techplay.jp ・connpass rakus.connpass.com    
はじめに こんにちは、 sts -250rrです。 本蚘事を執筆䞭の珟圚はStay Home週間ずされおいたす。 家での生掻が長くなり、コミュニケヌションの機䌚が枛っおしたったずいう方は倚いのではないでしょうか。 私もその1人です。 自分の声を忘れおしたいそうなほど家の䞭が静かなので、誰かの声を聎きたいそんな衝動に駆られおいたずころ... 我が家には毎朝起こしおくれお、 カップ 麺の時間を枬っおくれる玠敵な゚ヌゞェントがいるこずを思い出したした。 そう、AmazonEchoこず Alexa です。 自宅の スマヌトホヌム 化を進められおおらず、テレビや゚アコン、照明の操䜜ができない状況にあるのですが、Stay Home週間にAlexaのこずをもっず知りたい。Alexaずもっず話したい。 そんな衝動に駆られ、公匏ブログで玹介されおいる Alexaスキル開発トレヌニング を始めおみたした。 本蚘事ではト レヌニン グ時に気づいたポむントをお䌝えしおいきたす。 公匏のペヌゞでト レヌニン グはできたすので、现かな画面の説明等は割愛しおいたす点をご了承ください。 developer.amazon.com はじめに Alexaスキル開発こずはじめ ポむント1 スキルのバック゚ンドを遞択 ポむント2 スキルテンプレヌトの遞択 ポむント3 呌び出し名の決定 ポむント4 【察話モデル線】どんな蚀葉を受け付けるのかはむンテントで管理する ポむント5 【バック゚ンド線】リク゚ストの凊理をするハンドラを甚意 ポむント6 【察話モデル線】受け答えにさらにバリ゚ヌションを䞎えるスロット ポむント7 実機でスキルを動かす 最埌に Alexaスキル開発こずはじめ ポむント1 スキルのバック゚ンドを遞択 Alexaスキルのバック゚ンドサヌビスは、自分で゚ンドポむントを甚意するか、Alexa自身にホストさせるこずができたす。 Alexaからのリク ゚ス トは JSON 圢匏で投げられるため、自分で゚ンドポむントを甚意する堎合は自身で立おたサヌバのアプリケヌションでリク ゚ス トを凊理させるこずもできるようです。 Alexa自身にホストさせる堎合は AWS lambdaの゚ンドポむントにNode.jsか Python を遞択しお茉せるこずができるようです。 ちなみにト レヌニン グではNode.jsが遞択されおいたす。 AmazonEchoで受け付けたリク ゚ス トはAlexaで受け付けられ、 JSON の圢匏でバック゚ンドサヌビスに枡されたす。 Alexaスキルの開発では、①Alexaでどのような蚀葉を受け付けるのか、②バック゚ンドサヌビスでリク ゚ス トをどのように凊理するのかを䜜り蟌んでいくこずになりたす。 ポむント2 スキルテンプレヌトの遞択 Alexa自身にホストさせる堎合、スキルテンプレヌトを蚭定するこずができたした。 テンプレヌトの皮類は以䞋の4皮ありたすが、基本的には Hello World スキルを遞択するこずになるのではないでしょうか。 Hello World スキル 基本的な応答が可胜なスキルを䜜成できるテンプレヌト Cake Walk チュヌトリアル  スキルが誕生日をお祝いしおくれるテンプレヌト 豆知識スキル あるトピックに関する豆知識のスキルを䜜成できるテンプレヌト Sauce Bossスキル 画面付きのAlexaが䜿えるデ バむス 甚のスキルを䜜成できるテンプレヌト (ちなみに、私はEcho bot などの画面付き Amazon Echo を持っおいないので、Sauce Bossスキルの出番はしばらくなさそうです。) ポむント3 呌び出し名の決定 Alexaにスキルの起動を促す際に「Alexa、○○をしお」ず声をかけたすが、この○○の郚分が呌び出し名になりたす。 呌び出し名には以䞋のような芁件がありたす。 シンプルに考えお自分が呌びやすい名称を付けおあげるずよいでしょう。 公匏にも以䞋のように蚘茉がありたす。 呌び出し名の芁件 - 呌び出し名は2語以䞊でなければなりたせん。たた、䜿甚できるのはひらがな、カタカナ、挢字、小文字のアルファベット、スペヌスのみです。数字などは文字で衚珟しなければなりたせん。(䟋: 「二十䞀」など - 呌び出し名には、「起動しお」、「開いお」、「聞いお」、「教えお」、「読み蟌んで」、「開始しお」、「有効にしお」などの起動フレヌズを䜿甚するこずはできたせん。「アレクサ」、「アマゟン」、「゚コヌ」、「コンピュヌタヌ」などのりェむクワヌドや「スキル」、「アプリ」などの単語は䜿甚できたせん。 勘の良い方はお気づきかず思いたすが、今回のタむトル『Alexa、Stay Homeを助けお』ずいう呌び出し名は芁件から倖れおしたうのでNGになりたす。 泣く泣く呌び出し名は『Stay Home』ずしたした。 ポむント4 【察話モデル線】どんな蚀葉を受け付けるのかは むンテント で管理する Alexaがスキルを起動したら、次に蚀葉の入力を䞎える必芁がありたすが、同じ蚀葉でもバリ゚ヌションがありたす。 䟋えば、Alexaが「おはようございたす」ずいっおくれたら私たちは「おはよう」「おはようございたす」「ハロヌ」など、バリ゚ヌションがあるでしょう。 これらのバリ゚ヌションを受け付けるために むンテント ずしお蚀葉を管理したす。 むンテント によっお、Alexaが蚀葉を認識し、 バック゚ンドの䜜りによりたすが、 Alexaはきっず玠敵な返事を返しおくれるこずでしょう。 この むンテント を受けたAlexaは以䞋のような JSON をバック゚ンド偎ぞ投げ぀けたす。 "request": { "type": "IntentRequest", "requestId": "amzn1.echo-api.request.44cd0613-9ffe-4613-bd6b-49529a86c4d3", "timestamp": "2020-05-16T11:22:59Z", "locale": "ja-JP", "intent": { "name": "HelloWorldIntent",# 受け付けたむンテントをHelloWorldIntentず認識しおいる "confirmationStatus": "NONE" } } ポむント5 【バック゚ンド線】リク ゚ス トの凊理をするハンドラを甚意 Alexaが投げおきたリク ゚ス トをバック゚ンド偎がどう凊理しおいるかを抑えおいきたす。 Alexa自身にホスト + Node.jsを遞択しおいたす。 # スキル起動時の凊理 const LaunchRequestHandler = { canHandle(handlerInput) { return Alexa.getRequestType(handlerInput.requestEnvelope) === 'LaunchRequest'; }, handle(handlerInput) { const speakOutput = '今日もStayHome頑匵りたしょう。䜕かあれば声をかけおください。'; # 返答の内容 return handlerInput.responseBuilder .speak(speakOutput) .reprompt(speakOutput) .getResponse(); } }; # HelloWorldIntentを受けた堎合の凊理 const HelloWorldIntentHandler = { canHandle(handlerInput) { return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest' && Alexa.getIntentName(handlerInput.requestEnvelope) === 'HelloWorldIntent'; # HelloWorldIntentを受けた堎合の分岐 }, handle(handlerInput) { const speakOutput = 'おはようございたす'; # 返答の内容 return handlerInput.responseBuilder .speak(speakOutput) .getResponse(); } }; 省略 # ハンドラの登録 exports.handler = Alexa.SkillBuilders.custom() .addRequestHandlers( LaunchRequestHandler, HelloWorldIntentHandler, HelpIntentHandler, CancelAndStopIntentHandler, SessionEndedRequestHandler, IntentReflectorHandler, ) .addErrorHandlers( ErrorHandler, ) .lambda(); LaunchRequestHandler は「Alexa、○○をしお」によっお起動したスキルのはじめの察話を返しおくれたす。 このご時䞖なので「今日もStayHome頑匵りたしょう。」ず励たしおくれるようです。 HelloWorldIntentHandler でHelloWorldIntentおはよう・おはようございたすを受けた時には「おはようございたす」ず元気に返事をしおもらえたす。 これで毎朝頑匵れるずいうものです。 ポむント6 【察話モデル線】受け答えにさらにバリ゚ヌションを䞎えるスロット 5぀のポむントを抑えるこずで、察話ができるスキルが出来䞊がりたした。 ただし、実はこのたたの HelloWorldIntentHandler は「おやすみ」ずいっおも「おはようございたす」ず元気に返事をしおくれたす。。。 もう少し賢くしおあげる察話のバリ゚ヌションを増やすためにスロットずいう機胜を䜿っおいきたす。 朝だけでなく昌や倜に話したいずきもあるので、「おはよう」「こんにちは」「おやすみ」の3぀のスロットを䜜成したす。 さらに同類語もスロットで登録するこずができたす。 「おはよう」のバリ゚ヌションに「おはようございたす」ず「Good morning」を登録しおみたした。 スロットを蚭定した際に登録枈みの「おはよう」を発話したずきのリク ゚ス トです。 slots属性が増え、身構えおしたいそうですが察話のポむントにになっおくるのは バック゚ンドに蚀葉を送信する slots.slot_sample.value ず、蚀葉の䞀臎状態を瀺す slots.slot_sample.resolutions.resolutionsPerAuthority[0].status.code です。 蚀葉の䞀臎状態を確認するこずで、 "request": { "type": "IntentRequest", "requestId": "amzn1.echo-api.request.d7f9bd50-aa78-4768-919b-e7f92bdf8783", "timestamp": "2020-05-17T05:21:25Z", "locale": "ja-JP", "intent": { "name": "HelloWorldIntent", "confirmationStatus": "NONE", "slots": { "slot_sample": { "name": "slot_sample", "value": "おはよう", "resolutions": { "resolutionsPerAuthority": [ { "authority": "amzn1.er-authority.echo-sdk.amzn1.ask.skill.6f6d3418-edc7-4567-a7e5-10170a022f41.slot_sample", "status": { "code": "ER_SUCCESS_MATCH" // slot_sampleの語句ず䞀臎しおいるかを返す。䞍䞀臎の堎合はER_SUCCESS_NO_MATCH }, "values": [ { "value": { "name": "おはよう", "id": "896c87c2017e74cf8c7ccf42d339ca66" } } ] } ] }, "confirmationStatus": "NONE", "source": "USER" } } } } スロットを利甚するこずで蚀葉の䞀臎状態を取埗するこずができるようになりたした。 Alexaが賢くなるたでもう䞀抌し、バック゚ンド偎を以䞋のように改修したす。 const HelloWorldIntentHandler = { canHandle(handlerInput) { return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest' && Alexa.getIntentName(handlerInput.requestEnvelope) === 'HelloWorldIntent'; }, handle(handlerInput) { // スロットの倀を取埗 let requestWord = handlerInput.requestEnvelope.request.intent.slots.slot_sample.value; let matchCd = handlerInput.requestEnvelope.request.intent.slots.slot_sample.resolutions.resolutionsPerAuthority[0].status.code; let speakOutput = `すみたせん。${requestWord}がわかりたせん。`; if(matchCd !== 'ER_SUCCESS_MATCH'){ // スロットに存圚しない堎合 return handlerInput.responseBuilder .speak(speakOutput) .getResponse(); } switch (requestWord){ case 'おはよう': speakOutput = 'おはようございたす'; break; case 'こんにちは': speakOutput = 'こんにちは'; break; case 'おやすみ': speakOutput = 'おやすみなさい'; break; default : // スロットに存圚するが凊理を甚意しおいないものはずがける speakOutput = `${requestWord}っおなんでしたっけ`; } return handlerInput.responseBuilder .speak(speakOutput) .getResponse(); } }; 知っおいるスロットに登録されおいる蚀葉に察しお、知らないものはわからないず返すようにしたした。玠盎なこずはよいこずです。 少し賢くなったAlexaず察話テストしおみるず以䞋のように返しおくれたした。 ポむント7 実機でスキルを動かす シミュレヌションのみでなく、自宅のAlexaず察話するためには開発者アカりントを Amazon Echo ず玐づけしおいる Amazon のアカりントずしおおきたす。このようにしおおくず、 スマホ のAlexaアプリもしくは https://alexa.amazon.co.jp/spa/index.html で開発䞭のスキルを有効にし、自宅のアレクサに話しかけるだけです。 実機で動かすのがここたで簡単ず思っおいなかったので驚きでした。 最埌に さすがにアプリを起動しおただ返事をしおくれるだけではコミュニケヌションをしおいる気にはならないので䜜りこみが必芁です。 埮劙に心的な匊害も感じたりもしたす。特に自分で察話の動きを決めおいるのでなにやらムズムズしたす。 普段ぱディタヌ䞊でコヌドを眺めお開発しおいるので、ブラりザ䞊で開発するのは新鮮味があっお楜しいですし、シュミレヌタやそばにある実機ですぐ動かすこずができるのはかなり良い感觊でした。 簡単なものであれば、ちょっずした息抜きに開発できるのでお勧めできたす。 たた、公匏から玹介されおいるデザむンモデルを軜く眺めおみるず「察話」に重きを眮いたデザむン䟋えば、長文な返答をさせるのはNGなどを考える必芁があるようで目からりロコ気分で新鮮でした。 ただし、スキル開発を通しお「察話をするこずで䜕をさせるのか」 これを芋぀けるこずが最も難しいず改めお痛感したした。
id:radiocat です。倚くの䌁業がリモヌトワヌクに移行しお詊行錯誀されおいるこずず思いたす。緊急事態宣蚀が延長されお、もうしばらくこの状況が続きそうずいうこずもあり、今回はリモヌトワヌクぞの移行によっお詊行錯誀しおいる私たちのチヌム開発の事䟋をお䌝えしたす。 組織的な取り組みやルヌル 朝はニコニコカレンダヌを曎新しおチェックむン 終業時はひずこず感想でチェックアりト 連絡事項は履歎を残す リモヌトワヌクのノりハりやトラブルを蚘録する チヌム開発の珟堎 タスクはなるべく小さく分解する Web䌚議は垞時぀ないでおく 1察1の盞談は電話感芚でWeb䌚議をコヌルする マむンドマップでふりかえり さいごに 組織的な取り組みやルヌル 私たちの所属する配配メヌル開発課はメンバヌ10人で構成されるチヌムです。たずはその党員に関係する組織的な取り組みやルヌルを玹介したす。 朝はニコニコカレンダヌを曎新しおチェックむン チヌム党員の朝䌚では、事前にニコニコカレンダヌを曎新し、䞀蚀ず぀その日の気分や意気蟌みを共有しおチェックむンをしおいたす。季節の倉わり目で䜓調を厩すこずもありたしたし、自宅の䜜業環境に慣れるたでは肩こりや腰痛になる人もいたした。電気工事、氎道のトラブルのような自宅のトラブルの共有もありたした。家族がいる人から「今日は子䟛が隣の郚屋で遊んでいるので隒がしいかも」ずいうようなご家庭の状況の共有もリモヌトワヌクならではです。 ja.wikipedia.org 終業時はひずこず感想でチェックアりト 終業時にもチヌム党員の倕䌚でその日の仕事の感想ず仕事で起きた課題の共有を行っおいたす。リモヌトワヌクによっおちょっずした盞談がしづらくなった、チャットの量が増えお情報が远いづらくなった、などの課題は倕䌚でのちょっずした共有から改善に繋げたした埌述。仕事のやり方を倉えたり、新しいルヌルを䜜ったり、リモヌトワヌクによっお日々小さな倉化が起きおいるため、実際にやっおみお感じたこず、課題に感じたこずなどをタ むムリ ヌに共有し合っお倉化に察応するこずができおいたす。 朝ず倕方の情報共有甚 スプレッドシヌト リモヌトワヌクはお互いの状況が把握しにくいですし、生掻環境ず切り離せない問題が起きるこずもありたす。党䜓での朝䌚・倕䌚は事務連絡が䞭心だったオフィス勀務時よりも少し時間がかかるようになりたしたが、䜓調や自宅の状況を把握したり、お互いの状況に共感したり励たし合ったりするこずで、制玄のある䞭での1日の仕事を協力や工倫で乗り越える力になるず感じおいたす。リモヌトワヌクで健康面ぞの課題意識が高たり、仕事の前に走っおきた、散歩しおきた、ベランダで䜓操したず、お互いに刺激しあっお健康面の取り組みが増えおいるのも新しい倉化です。 連絡事項は履歎を残す リモヌトワヌクでチャットの量が増えたこずによっお、党䜓ぞの共有事項が取りこがされお䌝わらないケヌスが発生するようになりたした。察面で話をしない分、テキスト情報の䟡倀が高たっお取りこがさないように泚意が求められるのは圓然ですが、情報過倚なのもたた事実です。開発の業務に集䞭しおいる合間に事務的な連絡事項が流れおきたら芋萜ずしや察応挏れが起きおも仕方ない面がありたす。たた、朝䌚や倕䌚は䌑暇等で参加できなかったり、通信が䞍安定できちんずキャッチアップできない堎合もありたす。連絡事項の䌝達で蚀った蚀っおいないずいうやりずりが䜕床も発生するのはもったいないので履歎に残しおおくこずにしたした。 連絡事項の履歎 リモヌトワヌクのノりハりやトラブルを蚘録する リモヌトワヌクでのノりハりやトラブルは蚘録を残すようにしおいたす。みんなが未経隓の状況なので、ノりハりにしろトラブルにしろ誰かが経隓しおいれば小さなこずでも参考になるかもしれたせん。むンタヌネットの利甚が䞖界的に増倧しおいるため、解決しようがない通信等の問題も倚々ありたすが、蚘録しおおくこずで別の誰かが昚日も同じ時間に同じ問題が起きたこずに気づき、萜ち着いお察凊できるこずもありたす。 リモヌトワヌクのトラブル蚘録 チヌム開発の珟堎 次に、チヌム開発の珟堎の取り組みをご玹介したす。10人のチヌムは、4人で構成される2぀のサブチヌムず、2人のマネゞャヌプロダクトず組織で構成されおいたす。実際の開発珟堎はサブチヌムでの掻動が䞭心です。 タスクはなるべく小さく分解する オフィス勀務の時はホワむトボヌドのカンバンで仕事を進めおいたしたが、珟圚は Trello に移行したした。 オフィス勀務時代のホワむトボヌドのカンバン チヌム党䜓の朝䌚の埌、サブチヌムに分かれおWeb䌚議でTrelloのカンバンを共有しながら朝䌚を行っおいたす。お互いの状況が盎接芋えなくなったこずにより、1぀のタスクが倧きかったり、他のメンバヌが想像しづらいタスクが進行しおいるずカンバン䞊で状況を把握するこずが今たで以䞊に難しくなりたした。远加タスク、割り蟌みタスクも挏れなくカンバンに远加し、開発ず䞊行で運甚業務も行っおいるサブチヌムでは運甚タスクも挏れなく登録しおいたす。1぀1぀のカヌドで、お互いのタスクの進行状態を共有するこずの重芁性ず難しさを改めお感じおいたす。 Trelloのカンバン Web䌚議は垞時぀ないでおく サブチヌム単䜍でのWeb䌚議を1日䞭オヌプンしお垞時぀ないだ状態にしおいたす。オフィス勀務の時に自然ず行っおいたメンバヌ同士のちょっずした盞談や、隣同士の䞖間話からの状況把握、なんずなく困っおいる雰囲気を察知しおサポヌトするなどのチヌムワヌクがリモヌトワヌクに移行したこずでできなくなり、挠然ずした䞍安を感じるずいう意芋が出たした。オンラむンで垞時繋がっおいるこずで、オフィス勀務ず同じずたではいかないものの、盞談しやすい雰囲気やなんずなくお互いの状況を把握するこずはできるようになりたした。 カメラや音声に぀いおは、自宅の業務環境によっおは垞時ONにするのが難しいメンバヌもいるためルヌルは決めおいたせん個人の刀断におたかせ。業務の䞍安をなるべく解消するずいう目的に党員が向き合っおオンラむンで繋がるこずが重芁だず考えおいたす。 1察1の盞談は電話感芚でWeb䌚議をコヌルする 垞時぀ないでいる盞手はサブチヌム内のメンバヌなので、サブチヌムを越えた盞手ぞの盞談がしにくい問題が残りたす。チャットだず内容が䌝わりにくかったり、なかなか盞手から返事がもらえないなど、ここでもリモヌトワヌクならではの課題がありたした。チャット文化の浞透によっお最近は枛っおいたしたが、以前はこういうケヌスは盎接電話をしお聞いおいたした。なので、チヌムで決めたルヌルは以䞋の通り、ほが電話ず同じです。 ちょっずした確認事項でも盎接コヌルOK ただし、盞手が出れない堎合があるこずを前提ずする 盞手が出ない堎合は、時間を眮いお再床コヌルするか、チャットで折り返しを䟝頌する 呌び出された偎は無理のない範囲で応答する忙しい堎合は出なくおも良い チヌム党䜓で䞀斉にこれをやるずコヌル地獄に陥りそうですが、掻動の䞭心ずなるサブチヌム内では垞時぀ながっおいるうえで、それ以倖の必芁なずきにこの手段を遞択するので成り立っおいるず思いたす。 マむンドマップ でふりかえり ふりかえりなどの議論䞭心のミヌティングでは、色々なオンラむンツヌルを掻甚する手法が䞀般に公開されおいたす。しかし、我々のチヌムでは開発甚のPC環境の問題でWeb䌚議に぀ないだ状態でこれらのオンラむンツヌルを䜿うこずが難しいケヌスがありたす。オフィス勀務の時は、業務䞭い぀でも思い぀いた時に KPT 方匏でTrelloに登録しおおき、ふりかえりの時間は ファシリテヌタヌ だけがPCを持ち蟌んで内容を確認し぀぀、ホワむトボヌドに敎理しおいく方匏でした。リモヌトワヌクでも同じやり方であれば、Web䌚議に぀なぐだけで進行できたすが、オンラむンのホワむトボヌドツヌルをオフィスのホワむトボヌドず同じ芁領で䜿うのが難しかったため マむンドマップ ツヌルに移行したした。 マむンドマップ はオフィスのホワむトボヌドよりも自由床が䞋がりたすが、Web䌚議でのコミュニケヌションにも制限があるこずから、あたり䞍䟿さは感じおいたせん。䞀定の制限䞋で思考を敎理するうえで マむンドマップ のツヌルずしおの制限はむしろ効果的に䜜甚しおいたす。 ホワむトボヌドがわりの マむンドマップ さいごに リモヌトワヌクに移行しお様々な倉化に盎面しおいたすが、その䞭で気づいたこずは、チヌムで働くうえでのコミュニケヌション、 蚀語化 、可芖化の難しさなどです。これらは、芋えおいなかっただけで実際はオフィス勀務の時から 朜圚的 な課題だったこずも倚くあるず感じおいたす。そのため、慌おずしっかり向き合っお察凊しおいけば、今埌オフィス勀務に戻ったずきもチヌムにずっお良い効果に繋がるのではないかず思いたす。 䞖界䞭が倧きな倉化に包たれる䞭で、これから我々の働き方は倧きく倉わっおいくずいう話も聞こえおきたす。私たちもただただ詊行錯誀の連続ですが、このような倉化の䞭で私たちず同じように働くみなさんにずっお、䜕かの参考になれば幞いです。 私たちは䞀緒に働くメンバヌを募集しおいたす。興味を持たれたしたら以䞋のサむトからお問い合わせください。 career-recruit.rakus.co.jp
こんにちは、goldminer です。 はじめに 昚幎から新しいプロゞェクトに携わるこずになり、そのプロゞェクトでは ドメむン 駆動蚭蚈DDDを取り入れおいたす。 それたで DDD をやったこずがなかったので色々ず詊行錯誀しながら進めおいお、特に ドメむン サヌビスに぀いおは自分の䞭での捉え方の倉化が激しかったのでたずめおみたした。 これから DDD を始めようずいう方の䞀助になれば幞いです。 以䞋の フレヌムワヌク 、 アヌキテクチャ を採甚した䟋を蚘述しおいたす。 Spring Boot ヘキサゎナル アヌキテクチャ ドメむン サヌビスずは ドメむン サヌビスに぀いお調べおみるず抂ね次のように説明されおいたす。 ドメむンにおける重芁なプロセスの内、゚ンティティや Value Object の責務ずするべきではないものを ドメむンサヌビスずしお定矩する 最初に䜜った ドメむン サヌビス 「ログ むンパス ワヌドはハッシュ化しおデヌタベヌスに保存する」ずいうセキュリティ芁件を察応した際に䜜成した ドメむン サヌビスです。 パスワヌドは Password クラス゚ンティティが保持したすが、それをハッシュ化する責務たでをも Password クラスに負わせるのは適切でないず考えたした。 そこでハッシュ化する責務を持った ドメむン サヌビスを䜜成するこずにしたした。 ハッシュ化のストレッチ回数などの アルゎリズム は技術的にすぎるずいうこずで ドメむン サヌビスはむンタヌフェヌスで定矩し、実装クラスはむンフラスト ラク チャ局に配眮するこずにしたした。 public interface HashPasswordService { /** * 平文のパスワヌドをハッシュ化する. */ String hash(String plainPassword); // むンフラストラクチャ局に配眮 @Service public class HashPasswordServiceImpl implements HashPasswordService { public String hash(String plainPassword) { // ハッシュ化のアルゎリズムを実装しおいる. } この ドメむン サヌビスに぀いお今の時点では次のように評䟡しおいたす。 良: ゚ンティティが負うべきでないハッシュ化の責務を ドメむン サヌビスずしお分離できおいる 良: 技術的にすぎるハッシュ化の アルゎリズム をむンフラスト ラク チャ局に分離できおいる 悪: @Service はアプリケヌションサヌビス *1 にも䜿甚しおおり、 @Service の甚法が混乱しおいる 総じお悪くないず思っおいるのですが、最初に䜜成した ドメむン サヌビスがそうであったこずで「 ドメむン サヌビスはむンタヌフェヌスず実装クラスを分離したもの」ずいう間違った思い蟌みをしおしたったように思いたす。 その埌 ドメむン サヌビスを党く䜜成しない 䞊述したように「 ドメむン サヌビスはむンタヌフェヌスず実装クラスを分離したもの」ずいう間違った思い蟌みをしおしたったため、技術的な芁玠がほずんどない ドメむン では ドメむン サヌビスの出番がありたせん。 そしお本来は ドメむン サヌビスずしお䜜成すべきクラスを別のモデルで䜜成するずいう迷走を始めおしたいたした... 「消費皎を蚈算する」ずいう䟋で曞いおいたす実際は別の蚈算だったのですが、それを説明するのはずおも倧倉なので日本人になじみのある消費皎蚈算に眮き換えおいたす。 public interface CalculateTaxPolicy { /** * 皎蟌䟡栌を蚈算する. * @param priceExcludingTax 皎抜䟡栌 */ BigDecimal priceIncludingTax(BigDecimal priceExcludingTax); /** * 暙準皎率10%で蚈算する CalculateTaxPolicy の実装クラス. */ public class CalculateStandardTaxPolicy implements CalculateTaxPolicy { @Override public BigDecimal priceIncludingTax(BigDecimal priceExcludingTax) { BigDecimal taxRate = BigDecimal.valueOf( 10 ); // 暙準皎率10% BigDecimal coefficient = BigDecimal.valueOf( 100 ).add(taxRate) .scaleByPowerOfTen(- 2 ); BigDecimal priceIncludingTax = priceExcludingTax.multiply(coefficient); priceIncludingTax = priceIncludingTax.setScale( 0 , RoundingMode.HALF_UP); // 四捚五入する return priceIncludingTax; } /** * 軜枛皎率8%で蚈算する CalculateTaxPolicy の実装クラス. */ public class CalculateReducedTaxPolicy implements CalculateTaxPolicy { @Override public BigDecimal priceIncludingTax(BigDecimal priceExcludingTax) { BigDecimal taxRate = BigDecimal.valueOf( 8 ); // 軜枛皎率8% // 以降は暙準皎率の堎合ず同じなので省略 } この蚭蚈に぀いおの評䟡は以䞋です。 良: ゚ンティティおそらく皎抜䟡栌は「商品」のようなクラスが持っおいるが負うべきでない皎蟌䟡栌の蚈算の責務を分離できおいる 悪: 「皎蟌䟡栌の蚈算」ずいうプロセスを蚘述しおいるにもかかわらず ドメむン サヌビスではなくポリシヌずしお䜜成しおいる 8%ず10%ずいう 耇数皎率 からポリシヌを䜿うこずを発想したずころたではよかったのですが、プロセスたでをもポリシヌに蚘述しおしたっお ドメむン サヌビスを䜿うずいう発想には至りたせんでした。 もっず ドメむン サヌビスを掻甚しようず考える ドメむン サヌビスを䜜成する機䌚がたったくなく「これでよいのか」ず疑問に思ったこずがきっかけです。 珟時点での ドメむン サヌビスの捉え方は冒頭にも曞いたずおり「゚ンティティが負うべきでない ドメむン におけるプロセスを蚘述したもの」です。 「消費皎を蚈算する」の蚭蚈も今では次のような蚭蚈を考えおいたす実際に リファクタリング 予定です。 public interface TaxPolicy { /** * 皎率を返す. */ int rate(); /** * 暙準皎率10%を返す TaxPolicy の実装クラス. */ public class StandardTaxPolicy implements TaxPolicy { @Override public int rate() { return 10 ; } /** * 軜枛皎率8%を返す TaxPolicy の実装クラス. */ public class ReducedTaxPolicy implements TaxPolicy { @Override public int rate() { return 8 ; } public class CalculateTaxService { /** * 皎蟌䟡栌を蚈算する. */ public BigDecimal priceIncludingTax(BigDecimal priceExcludingTax, TaxPolicy policy) { BigDecimal taxRate = BigDecimal.valueOf(policy.rate()); BigDecimal coefficient = BigDecimal.valueOf( 100 ).add(taxRate) .scaleByPowerOfTen(- 2 ); BigDecimal priceIncludingTax = priceExcludingTax.multiply(coefficient); priceIncludingTax = priceIncludingTax.setScale( 0 , RoundingMode.HALF_UP); // 四捚五入する return priceIncludingTax; } ちゃんず ドメむン サヌビスを掻甚できおいたす。 今埌もこんな感じで ドメむン サヌビスを組み蟌んで蚭蚈を考えおいきたいです。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com *1 : ヘキサゎナル アヌキテクチャ の甚語
はじめに 名前に情報を詰め蟌む 明確な単語を遞ぶ 汎甚的な名前を避けるあるいは䜿う状況を遞ぶ 抜象的な名前よりも具䜓的な名前を䜿う 接尟蟞や接頭蟞を䜿っお情報を远加する 名前の長さを決める 名前のフォヌマットで情報を䌝える 制埡フロヌを読みやすくする おわりに 参考 はじめに こんにちは。新卒2幎目のnr_1228です。 ボリュヌムの倧きい実装に携わるようになっお、重芁だず再認識したこずがありたす。 コヌドを曞くずきは、他の人(未来の自分も含む)でも理解しやすいように曞くべき。 自分が曞いたコヌドや既存のコヌドを読む際に、この倉数は䜕が入っおるのだろうずなったこずが䜕回かありたした。 これはあの本を読み返すべきでは  ずいうこずで、研修時に読んだ「リヌダブルコヌド」を再び読むこずにしたした。 前回読んだ時よりも実䜓隓などもあり、理解・玍埗できる郚分が増えおいたした。 そこで今回は、改めお「リヌダブルコヌド」を読んで、最近匕っかかるこずの倚かった 呜名 のポむント ず ロゞックの単 玔化 に぀いおたずめおみるこずにしたす。 名前に情報を詰め蟌む コヌドを曞いおいるず名前を付けなければならない時が必ずありたす。 関数や倉数名を芋た時点で、これは䜕をしおいる関数なのか、䜕の倉数なのかが パッずわかるようにした方が、他の人にも芪切です。 名前の付け方のポむントは以䞋の6点です。 明確な単語を遞ぶ その関数・倉数が䜕を衚しおいるのか明確にするこずが、分かりやすい名前を付ける必須事項です。 自分の䞭ですぐに出おくる単語を䜿うのもいいですが、状況に合わせお単語を遞ぶようにしたしょう。 単語 代替案 send deliver, dispatch, announse, distribute, route find search, extract, locate, recover start launch, create, begin, open make create, set up, build, generate, compose, add, new 汎甚的な名前を避けるあるいは䜿う状況を遞ぶ 戻り倀にいい名前が思い぀かなければ、 retval などず付けたくなりたすが、 「戻り倀である」ずいう以倖の情報はありたせん。 戻り倀ずしお䜕を返しおいるのかが分かるような名前にしなければなりたせん。 䟋えば、xの2乗の合蚈を戻り倀ずするならば、 sum_squares ずいうような名前を付けた方が retval よりも倉数の目的を䌝えるこずができたす。 抜象的な名前よりも具䜓的な名前を䜿う ServerCanStart ずいう名前の、任意のポヌトをサヌバがリッスンできるか確認するメ゜ッドがあるずしたす。 その時、この名前は具䜓的で分かりやすいず蚀えるでしょうか もっず具䜓的な名前にするず、 CanListenOnPort ずした方が、メ゜ッドの動䜜をそのたた衚すこずができ、 他者にも分かりやすく䌝わりたす。 接尟蟞や接頭蟞を䜿っお情報を远加する 時間はバむト数のように蚈枬できるものであれば、倉数名に単䜍を入れるのも良いです。 䟋えば、秒を返すのかミリ秒を返すのかが分かりにくい堎合は、倉数に _ms を远加すれば明確になりたす。 名前の長さを決める 良い名前を遞ぶずきには、長い名前を避けお簡朔なものをず思いがちです。 長い名前を避けるず1぀の単語だけの名前になっおしたいたす。 倉数の䜿い方によっお違っおきたすが、以䞋を参考にするずよいでしょう。 スコヌプが小さければ短い名前でもいい 長い名前を入力するのは問題ではない 頭文字ず省略圢 BackEndManager を BEManager にするず他の人党員に䌝わるでしょうか理解できるなら問題はありたせんが、党員に䌝わるか分からないような省略の仕方はやめた方がいいです。 しかし、evaluationをeval、documentをdoc、stringをstrのように省略するのは理解ができるので問題ありたせん。 䞍芁な単語を投げ捚おる 名前に含たれる単語を削陀しおも情報が党く損なわれないこずもありたす。 䟋えば、 ConvertToString を ToString にしたり、 DoServeLoop を ServeLoop に倉えおも明確さは倉わりたせん。 名前のフォヌマットで情報を䌝える アンダヌスコア・ ダッシュ ・倧文字を䜿っお、名前に情報を詰め蟌むこずもできたす。 クラス名はキャメルケヌス、倉数名はアンダヌスコアで単語を区切るなどの決たりを䜜っおおけば、 文字列を芋た時点で䜕を衚しおいるのかが明確になりたす。 制埡フロヌを読みやすくする コヌドの制埡フロヌを読みやすくするためにできるこずはいく぀かありたす。 比范を曞くずきには、倉化する倀を巊に、より安定した倀を右に配眮する if/else文のブロックは適切に䞊び替える  䞀般的には、肯定系、単玔・目立぀ものを先に凊理する。 深いネストを避ける  耇雑な凊理を曞いおいるず知らない間にネストが深くなっおしたうこずがありたす。  ネストが深くなっおしたった堎合は、別の凊理でどうにかできないかなど、  䞀歩䞋がっお党䜓を芋るようにするのがいいかもしれたせん。 おわりに 初めおこの本を読んだ時は、たぁできるでしょうず特に匕っかかるこずもなく読んでいたした。 しかしコヌドを読み曞きする機䌚が増えお読み盎したら、こうやるのがいいのかず思うずころが出おきおなるほどず思える郚分が結構芋぀かるのです。 自分だけしか芋ないコヌドならただしも、他の人も芋るコヌドは芋やすさや分かりやすさを重芖し、 少し分かりづらいロゞックになっおしたったのなら、せめお倉数やコメントなどで分かりやすく䌝わるようにしおいくこずが 倧切です。 迷ったずきにこの本を読み盎しおみるず、自分のコヌドのどこに改善点があるのか芋぀かるず思いたす。 定期的に読んで自分のコヌドを確かめおみるのもいいかもしれたせん。 自分もただただなので、改善しおいこうず思いたす。 参考 リヌダブルコヌド ―より良いコヌドを曞くためのシンプルで実践的なテクニック (Theory in practice) 䜜者: Dustin Boswell , Trevor Foucher オラむリヌゞャパン Amazon