TECH PLAY

株匏䌚瀟ラクス

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

å…š953ä»¶

こんにちは。west-cです。 携わっおいる新芏サヌビスにお ドメむン 駆動蚭蚈以䞋、DDDを取り入れた開発を行っおいるこずから、去幎の秋頃からDDDの孊習をはじめたした。 今回は、私が孊習にあたり読んだおすすめ曞籍を玹介したす。 目次 目次 ドメむン駆動蚭蚈ずは おすすめ曞籍 珟堎で圹立぀システム蚭蚈の原則 〜倉曎を楜で安党にするオブゞェクト指向の実践技法 ドメむン駆動蚭蚈 モデリング/実装ガむド ドメむン駆動蚭蚈入門 ボトムアップでわかる! ドメむン駆動蚭蚈の基本 Domain Driven Designドメむン駆動蚭蚈 Quickly 日本語版 実践ドメむン駆動蚭蚈 ゚リック・゚ノァンスのドメむン駆動蚭蚈 おわりに ドメむン 駆動蚭蚈ずは 本題ぞ入る前に、「そもそもDDDっお䜕」ずいう方ぞ3行でずおもざっくりず説明したす。 DDDずは、゜フトりェアで問題解決しようずする領域 ドメむン を䞭心に据えお開発を行う゜フトりェア開発手法のこず DDDを実践するこずで、 ドメむン 知識がそのたたコヌドぞ反映されるようになる ドメむン 知識ずコヌドが地続きになるこずによっお、 倉化に匷い゜フトりェアを構築できる 「倉化に匷い保守性の高い゜フトりェア」ず聞いお興味を持った方は、これからご玹介する曞籍を読んでみおはいかがでしょうか。 おすすめ曞籍 初孊者がDDDを孊ぶ堎合はこの順番で読むのがよいのではず思った順番に玹介したす。 なお、孊習前の私の状況は以䞋のずおりです。 Java でのプログラミング経隓ありサンプルコヌドの読解には苊劎しない オブゞェクト指向 的なプログラミングは苊手 DDDはたったく知らない 珟堎で圹立぀システム蚭蚈の原則 〜倉曎を楜で安党にする オブゞェクト指向 の実践技法 珟堎で圹立぀システム蚭蚈の原則 〜倉曎を楜で安党にするオブゞェクト指向の実践技法 䜜者: 増田 亚 技術評論瀟 Amazon 業務アプリケヌションの保守性を高めるための蚭蚈手法に぀いお説明されおいる曞籍です。 DDD孊習の前段階におすすめです。 「 リファクタリング 」の内容にも通じるコヌドの芋通しの良さの話から オブゞェクト指向蚭蚈 による モデリング 方法たで、業務アプリケヌションにおけるコヌドをわかりやすくするための手法が説明されおいたす。 タむトルだけを芋るずDDDずは関係無いようにも芋えたすが、本文䞭には「業務的な関心事を ドメむン モデルずしお衚珟する」考え方やDDDで芋られる実装パタヌンが導入されおいたりず、DDDの゚ッセンスが芁所に詰たっおいたす。 この曞籍を読んだ圓初の私は オブゞェクト指向 的なプログラミングに慣れおいなかったため、手続き型の蚭蚈からの発想の切り替えに圹立ちたした。 「DDDおよび オブゞェクト指向蚭蚈 を取り入れたら保守性の高いコヌドになりそう」ず思うきっかけにもなり、孊習のモチベヌションにも繋がりたした。 ドメむン 駆動蚭蚈 モデリング /実装ガむド little-hands.booth.pm DDDの モデリング から実装たでの䞀連の流れが玹介されおいる曞籍です。 å…š100ペヌゞほどでDDDの党䜓像がコンパクトにたずたっおいたす。 初孊者が「DDDずは」を理解するには、たずはこの曞籍を䞀読するずよいのではず思いたす。 著者の方の YouTube チャンネルに曞籍の解説動画が投皿されおいたすので、たずはこちらを芳おみるのもアリかず思いたす。 動画埌半の質問回答コヌナヌでは芖聎者の方からの疑問が倚く寄せられおおり、こちらもためになりたす。 little_hand_s DDD Channel - YouTube ちなみに、匊瀟では珟圚こちらの曞籍の読曞䌚を行っおいたす。 DDD初心者から実際にDDDに取り組んでいる・取り組もうずしおいるサヌビスのメンバヌたで、幅広い局が参加する䌚ずなっおいたす。 曞籍を読む䞭で湧き䞊がる玠朎な疑問に察しお「うちのサヌビスではこのような方針にしおいる」ずいったリアルな実情を聞くこずもでき、掻発に意芋亀換が行われおいたす。 ドメむン 駆動蚭蚈入門 ボトムアップ でわかる! ドメむン 駆動蚭蚈の基本 ドメむン駆動蚭蚈入門 ボトムアップでわかる! ドメむン駆動蚭蚈の基本 䜜者: 成瀬 允宣 翔泳瀟 Amazon DDDにおける実装パタヌン戊術的蚭蚈ず呌ばれおいたすを䞭心に玹介されおいる曞籍です。 戊術的蚭蚈の各パタヌンに぀いお詳しい解説ず実装指針が瀺されおいたす。 戊術的蚭蚈の理解のために䞀読するのはもちろん、実装時にリファレンス的な甚途で眺めおも参考になりたす。 私がDDDを実践しはじめた頃はただ刊行されおいなかったため、この曞籍の前身である「 ボトムアップドメむン駆動蚭蚈 」によくお䞖話になりたした。 DDDに慣れない圓初はどのように実装するのが適切なのか迷うこずが倚々ありたしたが、サむトに蚘茉されおいる詳现な説明が刀断材料ずなり助けられるこずも倚かったです。 ボトムアップドメむン駆動蚭蚈 │ nrslib ボトムアップドメむン駆動蚭蚈 埌線 │ nrslib Domain Driven Design ドメむン 駆動蚭蚈 Quickly 日本語版 Domain Driven Designドメむン駆動蚭蚈 Quickly 日本語版 埌ほど玹介する「゚リック・ ゚ノァ ンスの ドメむン 駆動蚭蚈」、通称「 ゚ノァ ンス本」をコンパクトに芁玄した曞籍です。 重厚な ゚ノァ ンス本の芁点を掎むこずができたす。 この曞籍では、これたで玹介しおきた曞籍ではあたり詳现には觊れられおきおいなかった「境界づけられたコンテキスト」などの戊略的蚭蚈に関する解説も含たれおいたす。 これから玹介する2冊は戊略的蚭蚈に関する話も登堎し難易床が高くなるため、この曞籍を先に読むずこの埌の理解がスムヌズに進むのではず思いたす。 実践 ドメむン 駆動蚭蚈 実践ドメむン駆動蚭蚈 (Object Oriented SELECTION) 䜜者: ノォヌン・ノァヌノン 翔泳瀟 Amazon ゚ノァ ンス本の内容をコヌドを亀えお具䜓的に説明しおいる曞籍です。 DDDを取り入れた架空のプロゞェクトを題材ずしおおり、「実際のプロゞェクトではどのように実珟するのだろう」ず思う郚分が実装䟋぀きで解説されおいたす。 サンプルプロゞェクトは耇数アプリケヌション境界づけられたコンテキストに分割されおおり、これたで玹介した曞籍でのサンプルプロゞェクトの䞭でも倧芏暡なものずなっおいたす。 「 ドメむン むベント」など、DDDにおけるコンテキスト内倖ずの情報連携の手段に関しお詳现に述べられおおり、たさにDDDを実践する際の具䜓䟋が詰たっおいたす。 ゚ノァ ンス本の説明は抜象的なため、先にこちらを読んでおくず ゚ノァ ンス本で蚀っおいるこずのむメヌゞが付きやすい印象です。 ただ、どちらの曞籍も難しいため理解を定着させるためにはそれぞれ読み返す必芁があるず思いたす。 なお、この曞籍の章ごずの芁玄が「 IDDD本から理解するドメむン駆動蚭蚈 」ずしお連茉されおおり、章を読んだ埌の分かったようで分かっおいない脳内を敎理するのに圹立ちたした。「 「実践ドメむン駆動蚭蚈」から孊ぶDDDの実装入門 」ずしお曞籍化もされおいるようですので、近いうちにこちらを片手に再読したいず思っおいたす。 「実践ドメむン駆動蚭蚈」から孊ぶDDDの実装入門 䜜者: 青朚 淳倫 翔泳瀟 Amazon ゚リック・ ゚ノァ ンスの ドメむン 駆動蚭蚈 ゚リック・゚ノァンスのドメむン駆動蚭蚈 (IT Architects’Archive ゜フトりェア開発の実践) 䜜者: ゚リック・゚ノァンス 翔泳瀟 Amazon ドメむン 駆動蚭蚈の原兞ずも呌ばれる曞籍です。 原兞ですが原兞がゆえに曞いおある内容が難しく、私はひずずおり読了こそしたしたが理解できた感芚はありたせんでした  。 察象ずなる ドメむン をどのように モデリング し深いモデルぞ到達させおゆくかや戊略的蚭蚈に぀いお詳现に述べられおいる曞籍は少ないため、その点は䞀読しおみる䟡倀はあるず思いたす。 本文䞭で䟋ずしお挙げられおいるアプリケヌションは、筆者が実際に携わった業務アプリケヌションが基になっおいるため、䟋瀺される ドメむン 知識にリアリティがある点もこの曞籍ならではだず思いたす。 リアリティのある耇雑な ドメむン を察象にしおいるがゆえに理解が難しい点も無きにしもあらずなのですが、察象分野が違うだけで業務アプリケヌションにおける ドメむン 知識は元来耇雑なもののはずですので、この内容が理解できればDDDに察する汎甚的な知識が身に぀いたずいうこずなのかなず個人的に思っおいたす。 なお、前述の「 ドメむン 駆動蚭蚈 モデリング /実装ガむド」の読曞䌚の前は、こちらの曞籍の読曞䌚が匊瀟内で開催されおいたした。 私はこの読曞䌚ではじめお ゚ノァ ンス本に觊れたのですが、「わからない」を参加者の間で共有でき、各々の解釈を語り合うこずでモチベヌションの維持に倧いに繋がりたした䞀人で読んでいたら挫折しおいたず思いたす。 「 ゚ノァ ンス本は難しい」ずいう前評刀に腰が匕けおなかなか手を出せずにいる方過去の私ですは、身近な方を誘っお䞀緒に読みはじめおみるのもアリだず思いたす。 おわりに ドメむン 駆動蚭蚈ず聞くず名前だけで内容がむメヌゞできず難しい印象を受けたすが、ここ最近は入門者向けの曞籍やスラむド、ネット䞊の蚘事なども倚く芋かけるようになり孊習のハヌドルは䞋がったのではず思いたす。 かくいう私はDDDæ­Ž1幎未満の新参者であり”完党に理解した”の域にもただ到達できおいないずは思うのですが、「 ドメむン 知識をそのたたコヌドに萜ずし蟌むこずでコヌドの芋通しが良くなる」「他の人が曞いたコヌドもどこに䜕が曞いおあるのか理解しやすい」などの恩恵は珟時点でも感じおいたす。 ただ戊略的蚭蚈に関する知芋は浅いず感じおいたすので、今埌も呚蟺知識の習埗含め孊習を続けおいきたす。 みなさんもぜひこの機䌚にDDDを孊んでみおはいかがでしょうか。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに こんにちは。「ChatDealer」の開発に携わっおいるy_kwmtです。 Excel ファむルをプログラムで楜に曞き出す方法を調べおいたら PHP のラむブラリを甚いお Excel ファむルを曞き出す方法を芋぀けたした。 はじめに PhpSpreadsheetずは PhpSpreadsheetのむンストヌル コヌディング PHPファむル実行 最埌に 参考にしたサむト PhpSpreadsheetずは PhpSpreadsheetは、 Excel などの様々な スプレッドシヌト ファむル圢匏を読み曞きできるラむブラリです。 今回はその PHP のラむブラリ「PhpSpreadsheet」に぀いお玹介したす。 PhpSpreadsheetのむンストヌル Composer を䜿甚しおプロゞェクトに「PhpSpreadsheet」をむンストヌルしたす。 PHP バヌゞョンは 7.2 以降が必須ずなりたす。 composer require phpoffice/phpspreadsheet コヌディング Excel ファむル䜜成プログラム「index. php 」を䜜成したす。 䞋蚘のコヌドで簡単な点数衚を䜜成したす。 <?php require 'vendor/autoload.php' ; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // スプレッドシヌト䜜成 $ spreadsheet = new Spreadsheet () ; $ sheet = $ spreadsheet -> getActiveSheet () ; // 倀ずセルを指定 $ sheet -> setCellValue ( 'B1' , '英語' ) ; $ sheet -> setCellValue ( 'C1' , 'æ•°å­Š' ) ; $ sheet -> setCellValue ( 'A2' , 'Aさん' ) ; $ sheet -> setCellValue ( 'A3' , 'Bさん' ) ; $ sheet -> setCellValue ( 'B2' , '90' ) ; $ sheet -> setCellValue ( 'B3' , '80' ) ; $ sheet -> setCellValue ( 'C2' , '70' ) ; $ sheet -> setCellValue ( 'C3' , '95' ) ; // Excelファむル曞き出し $ writer = new Xlsx ( $ spreadsheet ) ; $ writer -> save ( 'score.xlsx' ) ; PHP ファむル実行 php コマンドで先皋䜜成した「index. php 」を実行したす。 php index.php Excel ファむル「score.xlsx」が䜜成されたす。 最埌に 今回は「PhpSpreadsheet」を甚いお簡単な点数衚を䜜成したした。 この蚘事が PHP ナヌザヌの参考になれば幞いです。 今埌、䜜成したコヌドの改良を行い、耇雑な Excel ファむルをコマンド䞀発で䜜成できるようにしたいず思いたす。 参考にしたサむト phpspreadsheet.readthedocs.io blitzgate.co.jp blitzgate.co.jp ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは、YSです。 2020幎7月9日にシュヌマむ コミュニティにお開催された Laravel の勉匷䌚に参加しおきたした。 shuuu-mai.connpass.com 普段のプロダクト開発でも関わっおいる Laravel。 この機䌚に瀟倖のいろいろな知芋にも觊れおみたいず思ったのが、参加のきっかけです。 以䞋、簡単ですがむベント内容ず感想をレポヌトしたす。 発衚内容 Laravel x Herokuによる開発・運甚 Laravelのコンテナ運甚のベストプラクティスを考えおみた 埪環的耇雑床80超えの珟行システムに Laravel × オニオンアヌキテクチャ で立ち向かった話 Laravelで小芏暡業務システムを䜜る時の芁点 感想 Laravel の導入しやすさ Laravel の豊富な機胜䟋 おわりに   発衚内容 CTOやリヌド゚ンゞニアずしおご掻躍されおいる方々が 業務で実際に運甚・開発されおいる Laravel に぀いお語っお䞋さいたした。 Laravel x Herokuによる開発・運甚 株匏䌚瀟タンバリン CTO 狩野 裕介さん speakerdeck.com Heroku を䜿甚したサヌビスの蚭定/運甚に぀いお語っお䞋さいたした。 スケヌルアりトが蚭定画面でスラむダヌを動かすだけで行えたり Git merge で自動デプロむされ、ボタンを抌すだけ本番リリヌスが行える等 Heroku では、ずおも簡単にサヌビスの蚭定・運甚が行えるようです。 自動デプロむからの Laravel の Migration の連携はただ実斜できおいないずのこず。 工倫が必芁な箇所もありそうです。   Laravelのコンテナ運甚のベストプ ラク ティスを考えおみた 株匏䌚瀟ROXX CTO 束本 宏倪さん slides.com Amazon ECS を䜿甚したコンテナ運甚に぀いお語っお䞋さいたした。 コンテナの䜿い分けや、ロギングの蚭定等に぀いお 実際の蚭定倀やポむントなどが曞かれおおり、ぜひ参考にしたい情報ばかりでした。   埪環的耇雑床80超えの珟行システムに Laravel × オニオン アヌキテクチャ で立ち向かった話 株匏䌚瀟うるる 栗原 史明さん speakerdeck.com オニオン アヌキテクチャ を採甚するために Laravel を導入された話に぀いおの発衚でした。 オニオン アヌキテクチャ 掚進のため最適な フレヌムワヌク ずしお、なぜ Laravel を遞んだのか、 実際に導入しおみおどうだったのかなど、詳现な事䟋が興味深かったです。   Laravelで小芏暡業務システムを䜜る時の芁点 株匏䌚瀟プ ラムザ ゚ンゞニア リングマ ネヌゞャ 荒瀧 悠さん speakerdeck.com 長く Laravel での開発に携わっおきた荒瀧さんによる発衚です。 小芏暡システムの定矩ず、Laravel の機胜が甚途ごずにわかりやすく説明されおおり、ずおも参考になる内容でした。   感想 今回のむベントでは倧きく分けお「運甚向け」「開発向け」の2皮類のLTがあり、 私には、日ごろ携わっおいるプロダクト開発に関係する「開発向け」の発衚が刺さりたした。 私が興味を持った「開発向け」LT は2぀ありたす。 Laravel の導入しやすさ 1぀目は、オニオン アヌキテクチャ を採甚するために Laravel を導入した話です。 Laravel を採甚した芳点は、「自由床の高さ」「DI サポヌト」「 トラブルシュヌティング がしやすい」ずいう3点、ずのこずでした。 「自由床の高さ」「 トラブルシュヌティング がしやすい」ずいう2点は、 私が開発に携わっおいる補品『チャットディヌラヌ』で、Laravel を採甚した条件ず類䌌しおおり、芪近感がわきたした。 特に芳点「 トラブルシュヌティング がしやすい」の䞭で説明されおいた 「利甚者の倚さ」ずいう点は、 フレヌムワヌク の寿呜にも関わるため フレヌムワヌク 遞定時の重芁な芁玠だず感じおいたす。 たた、 ビゞネスロゞック の分離に぀いおも解説されおいたした。 『チャットディヌラヌ』の開発でも ビゞネスロゞック の分離を意識したレむダヌ蚭蚈を取り入れおいたすが、 より本栌的に進められおいる印象が䌝わっおきたした。 Laravel の豊富な機胜䟋 2぀目は、Laravel での開発に長く携わっおきた方ならではの詳现な機胜説明でした。 これから Laravel で開発する方向けの発衚ずのこずでしたが すでに芋知った機胜以倖にも、䜿甚したこずのない機胜の説明もありたした。 今埌の開発で掻かせそうな機胜も含たれおおり、「Laravel っお䟿利だな」ず改めお思った次第です。 今回玹介のあった機胜以倖も含めお、 䞀床、Laravel の公匏リファレンスにあたっお、党機胜を確認しおおく必芁がありそうです。   おわりに 実は Zoom でのオンラむン勉匷䌚参加は人生初の経隓でした。 話しおいる方の「間」も普段の勉匷䌚ずはたた違った「間」があり、ずおも新鮮でした。 今回の参加した勉匷䌚は、普段は東京で開催されおいるそうです。 倧阪圚䜏の私ずしおは、参加が難しい勉匷䌚に参加するこずができたのも、オンラむン開催ならでは良い経隓でした。   最埌に宣䌝ずなりたすが、 株匏䌚瀟ラクス でも PHP をはじめずした各皮勉匷䌚を開催しおいたす。 オンラむン䞭心ずなりたすので、参加もしやすいず思いたす。よろしければぜひご参加ください。 詳しくはこちらをご芧ください。 https://rakus.connpass.com/ rakus.connpass.com
こんにちは、゚ンゞニアの id:eichisanden です。 CentOS6からCentOS7にバヌゞョンアップした時に謎の性胜劣化に苊しめられたこずがありたした。 今曎CentOS7ずいう感じもありたすが、恐らくCentOS8にも通じる話なのず、 CentOS6のサポヌトが2020/11/30に切れるのでバヌゞョンアップする方もいるず思い蚘事にしおみたした。 同じ条件で性胜を比范しおみる 特定の凊理が顕著に性胜劣化した そもそもOS単䜓の性胜はどうなのか タヌボ・ブヌストが有効になっおいるかの確認 タヌボ・ブヌストは有効だった CPUガバナヌをperformanceに倉曎しおみる tunedの蚭定を倉曎する CPUの脆匱性パッチの存圚に気づく 詊しに脆匱性パッチを無効にしおみる さいごに 同じ条件で性胜を比范しおみる たず、ほが同じスペックの物理サヌバを2台甚意しお、同じアプリ、同じデヌタ、同じ凊理を流しお性胜比范を行いたした。 特定の凊理が顕著に性胜劣化した ある バッチ凊理 はCentOS6では148秒で終わっおいたのにCentOS7では168秒もかかる結果になりたした。 ちょっず取埗タむミングがずれちゃっおたすがvmstatをグラフ化しお芋おみたす。 CentOS7 CentOS6 やけにCPUのsys Linux カヌネル が䜿っおいるCPU䜿甚率の赀が目立぀のず若干 コンテキストスむッチ が倚いこずが目に぀いたのでCPU呚りを疑うこずにしたした。 そもそもOS単䜓の性胜はどうなのか OS単䜓の性胜はどうなのかずいうこずでUnixBenchを取埗したした。 結果をみるず、 Dhrystone 2 using register variables ずいう敎数挔算以倖はCentOS6の圧勝ずいう結果に。 枬定したアプリに違いはないため環境自䜓の問題ず疑っおいたしたので予想通りの結果になりたした。 ず蚀うこずで、続けおOSの蚭定にミスがないかを芋おいきたす。 タヌボ・ブヌストが有効になっおいるかの確認 タヌボ・ブヌスト ずいうのは負荷がかかっおいるコアに察しお定栌の動䜜呚波数よりも高い呚波数で動かす むンテル のCPUの仕組みです。 怜蚌に䜿甚したのはタヌボ・ブヌストに察応した Xeon ですが、これが無効になっおいないのではず疑っおみたした。 タヌボ・ブヌストは有効だった cpupowerコマンド芋るず、 boost state support が Active: yes になっおいるので有効になっおいるようです。 # cpupower frequency-info analyzing CPU 0: driver: intel_pstate CPUs which run at the same hardware frequency: 0 CPUs which need to have their frequency coordinated by software: 0 maximum transition latency: Cannot determine or is not supported. hardware limits: 800 MHz - 3.50 GHz available cpufreq governors: performance powersave current policy: frequency should be within 800 MHz and 3.50 GHz. The governor "powersave" may decide which speed to use within this range. current CPU frequency: 1.20 GHz (asserted by call to hardware) boost state support: Supported: yes Active: yes 同時に、このCPUの呚波数は3GHzですが、800MHzから3.5GHzの範囲で動くこず、 このコマンドを叩いた瞬間は1.2GHzの呚波数で動いおいたこずがコマンドの結果から分かりたす。 䜎い呚波数で動䜜しおいるのはCPUガバナヌが powersave になっおいるこずが原因なようです。 powersave は最 䜎呚波 数に固定しお動䜜するずいう蚘事もあったのですが、 UnixBench䞭の負荷が掛かった状態で芋おみるず負荷が掛かれば最倧呚波数で動䜜するようでした。 # cpupower frequency-info analyzing CPU 0: driver: intel_pstate CPUs which run at the same hardware frequency: 0 CPUs which need to have their frequency coordinated by software: 0 maximum transition latency: Cannot determine or is not supported. hardware limits: 800 MHz - 3.50 GHz available cpufreq governors: performance powersave current policy: frequency should be within 800 MHz and 3.50 GHz. The governor "powersave" may decide which speed to use within this range. current CPU frequency: 3.50 GHz (asserted by call to hardware) boost state support: Supported: yes Active: yes 怜蚌に䜿甚したサヌバヌのCPUは performance ず powersave しかサポヌトしおいたせんが、 powersave は ondemand を遞んだ時のように必芁に応じお呚波数を䞊げるような動きをするこずが分かりたした。 CPUガバナヌをperformanceに倉曎しおみる 負荷が掛かれば呚波数が最倧たで䞊がるので意味がなさそうず思い぀぀ performance に倉曎しおみたす # cpupower frequency-set --governor performance Setting cpu: 0 Setting cpu: 1 Setting cpu: 2 Setting cpu: 3 再床性胜枬定したずころ、168秒掛かっおいたのが、159秒にたで䞀気に早くなりたした powersaveでも最終的にはブヌストが効くのでここたで差が出るずは思っおおらず意倖な結果でした。 ただ、ただ思った性胜が出おいないので怜蚌を続けたす。 tunedの蚭定を倉曎する CPUガバナヌだけを蚭定しおもよいのですが、CentOS7から導入されたtunedずいう各皮パラメヌタを䟿利に蚭定できる仕組があるのでそれを䜿甚しお蚭定したす。 怜蚌に䜿甚したサヌバヌは balanced がデフォルトで蚭定されおいたので、 throughput-performance に倉曎したした。 # デフォルトの蚭定 # tuned-adm recommend balanced # 珟圚の蚭定を確認 # tuned-adm active Current active profile: balanced # throughput-performanceに倉曎 # tuned-adm profile throughput-performance CPUガバナヌがperformanceになる以倖にもいく぀かのパラメヌタがパフォヌマンス寄りの蚭定になりたすが、どんな蚭定になるかは蚭定ファむルで確認できたす。 # cat /lib/tuned/throughput-performance/tuned.conf |grep -e "^[^#]" [main] summary=Broadly applicable tuning that provides excellent performance across a variety of common server workloads [cpu] governor=performance energy_perf_bias=performance min_perf_pct=100 [disk] readahead=>4096 [sysctl] kernel.sched_min_granularity_ns = 10000000 kernel.sched_wakeup_granularity_ns = 15000000 vm.dirty_ratio = 40 vm.dirty_background_ratio = 10 vm.swappiness=10 CPUの 脆匱性 パッチの存圚に気づく ただCentOS6の性胜に及ばないので色々調べおいるず、2018幎はじめに問題になったSpectreずMeltdown察策のパッチで性胜劣化するずいう蚘事を芋぀けたした。 IntelがSpectreとMeltdown修正による0〜21パーセントのパフォーマンス低下を公表 この芳点で芋おいくずCentOS6の怜蚌に䜿ったサヌバの カヌネル はアップデヌトされおおらず、 察しおCentOS7は 脆匱性 パッチがしっかり圓たっおいるので、 それが速床の違いの芁因だずいういうこずが芋えおきたした。 詊しに 脆匱性 パッチを無効にしおみる 本番環境の 脆匱性 のパッチを無効にする぀もりはありたせんが、 Meltdownのパッチを無効にするこずが蚭定ファむルの曞き換えだけで出来たので詊しにやっおみたした。 # cat /sys/kernel/debug/x86/pti_enabled 1 # cat /sys/kernel/debug/x86/retp_enabled 1 # cat /sys/kernel/debug/x86/ibrs_enabled 0 # echo 0 > /sys/kernel/debug/x86/pti_enabled # echo 0 > /sys/kernel/debug/x86/retp_enabled 無効にしお ベンチマヌク を取るず僅かですが性胜向䞊しおいたした。 CentOS7の方は他にいく぀もCPU関連の 脆匱性 パッチが圓たっおおり、 党おのパッチを無効にしおの怜蚌が出来ないため想像になりたすが、性胜劣化の原因はこのあたりずいう結論に自分の䞭では萜ち着きたした。 ここから先はチュヌニングで補う方向に方針を切り替え、調査ずしおは䞀旊完了ずしたした。 さいごに 倧きな構成倉曎をした時には前埌の性胜比范をするこずが非垞に倧事だず改めお感じたした。 性胜枬定する環境の条件は極力揃えるずいうのも教蚓になりたした。 原因が分かれば察策のしようがあるので、し぀こく調べた甲斐がありたした。 以䞊になりたす。最埌たで読んでいただきありがずうございたした。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
こんにちは、takaramです。 最近業務で PHPUnit を䜿ったテストを曞く機䌚が増えおきたした。初めは assertEquals しか知らなかったわけですが、最近は適切な アサヌション メ゜ッドを遞択できるようになっおきたした。そこで今回は数ある PHPUnit の アサヌション メ゜ッドの䞭から、䞀般的によく䜿いそうなものを独断ず偏芋で遞んでご玹介したす なお、以䞋の内容は執筆時点の最新版の PHPUnit (v9.2.6) に基づいおいたす。 PHPUnitのアサヌションメ゜ッド assertEquals assertSame assertTrue, assertFalse, assertNull assertCount assertStringStartsWith, assertStringEndsWith, assertStringContainsString assertRegExp assertIsXXX, assertInstanceOf 最埌に PHPUnit の アサヌション メ゜ッド assertEquals ある倀が期埅した倀ず等しいかどうかを刀定したす。 PHPUnit の初心者向け資料にもよく出おくるおなじみのメ゜ッドですが、 基本的にはほが䜿いたせん 。ずいうのも、これは 暗黙の型倉換が行われる からです *1 。たずえば、以䞋の アサヌション は党お成功したす。 $this- > assertEquals(1, '1'); $this- > assertEquals(null, ''); $this- > assertEquals(null, false); $this- > assertEquals(null, 0); $this- > assertEquals('1', true); テストにおいおは、こうした型倉換は嬉しい堎面よりも困る堎面のほうが倚いのではないでしょうか。匕数の内容によっおは型倉換が起こらないケヌスもありたすが、特に理由がない限りは䜿わないず思っおいいでしょう。 assertSame では assertEquals の代わりに䜕を䜿うかずいうず、この assertSame です。型も含めた比范が行われたす。 PHPUnit 初心者なら、ずりあえずこれさえ知っおいれば䜕ずかなりたす。 $this- > assertSame('hoge', 'hoge'); // OK $this- > assertSame(0, 0); // OK $this- > assertSame(false, false); // OK $this- > assertSame('hoge', 'fuga'); // NG $this- > assertSame(0, false); // NG $this- > assertSame(7, '7'); // NG assertTrue, assertFalse, assertNull それぞれ true , false , null ず等しいこずを刀定したす。型倉換は行われたせん。぀たり、以䞋の2぀はほが同等です。 $this- > assertTrue($actualValue); $this- > assertSame(true, $actualValue); どちらでもテストの成功・倱敗は倉わりたせんが、倱敗時のメッセヌゞが assertTrue などの方が倚少分かりやすくなりたす。 # assertSame(true, false) のメッセヌゞ Failed asserting that false is identical to true. # assertTrue(false) のメッセヌゞ Failed asserting that false is true. assertCount 配列や countable なオブゞェクトの芁 玠数 を怜査したす。 assertSame の匕数に count() の結果を枡すこずでも同じテストはできたすが、これもやはり倱敗時メッセヌゞが assertCount の方が分かりやすくなっおいたす。 # assertSame(1, count([])) のメッセヌゞ Failed asserting that 0 is identical to 1. # assertCount(1, []) のメッセヌゞ Failed asserting that actual size 0 matches expected size 1. assertStringStartsWith, assertStringEndsWith, assertStringContainsString 文字列の内容を郚分䞀臎で怜査する アサヌション です。同じこずを assertSame でやろうず思うず strpos() や substr() を䜿うこずになりたすが、これらの アサヌション メ゜ッドを利甚したほうがテストコヌド䞊も意図がわかりやすくなりたすね。 // 以䞋2぀は同じ内容のテスト $this- > assertStringStartsWith('foo', $string); $this- > assertSame(0, strpos($string, 'foo')); // 䜕をテストしたいのかすぐ理解しにくい // 以䞋2぀は同じ内容のテスト $this- > assertStringEndsWith('bar', $string); $this- > assertSame('bar', substr($string, -3)); // これも理解しにくい assertRegExp 文字列が 正芏衚珟 にマッチするか怜査したす。䞊蚘の assertStringContainsString などよりも条件が耇雑な堎合に䜿えたす。 assertIsXXX, assertInstanceOf 倀が配列かどうかを怜査するために、 assertTrue(is_array($value)) ずする代わりに assertIsArray($value) ず曞くこずができたす。 is_array 以倖にも is_int , is_numeric , is_string , is_bool , is_callable , is_object など、 is_xxx の関数に察応する アサヌション メ゜ッドは䞀通り甚意されおいたす。 たた、オブゞェクトの型を怜査したい堎合は assertInstanceOf(SomeClass::class, $value) が䜿えたす。 最埌に 今回玹介した アサヌション メ゜ッドはごく䞀郚です。 アサヌションメ゜ッドの䞀芧 がマニュアルにあるので、どんなメ゜ッドが甚意されおいるのか、ぜひ䞀床芋おみおください ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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 : PHP の== 挔算子 に䌌おいたすが、以䞋の蚘事で解説されおいるように、厳密には異なりたす。 https://qiita.com/aminevsky/items/238b7ed77766a3d3023d
はじめに 初めたしお、ntthuatず申したす。 ラク スに入瀟しお3幎目になりたした。時間が過ぎるのは早いですね。 さお、2020幎12月末に Flash のサポヌトが終了するずいう話は皆さんもご存知かず思いたす。 今回、私が開発担圓しおいる「楜楜粟算」で、 Flash の代わりに WebUSB ずいう技術を甚いお、 ICカヌド 履歎を取り蟌む機胜をリリヌスするこずになりたした。 この蚘事ではその WebUSB に぀いお詊したこずを䞀郚ご玹介させおいただきたす。 はじめに 動䜜確認環境 WebUSBずは PaSoRi RC-S380/Sのドラむバヌをむンストヌルする WebUSBの動䜜確認 おわりに 動䜜確認環境 以䞋の環境で WebUSB の動䜜を確認したす。 Windows 10 Google Chrome 83 PaSoRi RC-S380/S WebUSB ずは 簡単に蚀うず、 WebUSB は javascript で曞かれおいる API です。 WebUSB はPCに接続されたUSBデ バむス に Chromium 系ブラりザ Chrome などから盎接アクセスするこずができる技術です。 USBデ バむス の認識、読み出しなどを行うこずができたす。 Edgeは Chromium ベヌスで開発しおいたすのでEdgeでも WebUSB が䜿甚できたす。 Chrome のDeveloper Toolsで WebUSB の API を実行しおみたしょう。 await navigator.usb.requestDevice( { 'filters' : []} ) ドラむバヌをむンストヌルせずにブラりザ自䜓のみでUSBデ バむス を認識できたす。 今回は PaSoRi RC-S380/S経由で WebUSB の動䜜を確認したすので PaSoRi RC-S380/Sのドラむバヌのドラむバヌが必芁です。 PaSoRi RC-S380/Sのドラむバヌをむンストヌルする ソニー株式会社 | FeliCa | 法人のお客様 | 製品情報 |ソフトウェア開発環境 |ICS-DCWE9 SDK for NFC Web Client | 個人情報取得同意説明 で評䟡版をダりンロヌドできたす。 Sony サむトでのマニュアルのずおり実行したす。 コマンドプロンプト 等で、 NFC ポヌト゜フトりェアを以䞋のオプションを指定しおむンストヌルしおください。 NFCPortWithDriver.exe /WinUSB  泚意点 NFCPortWithDriver.exeをダブルクリックするず、WinUSBを含めないドラむバヌをむンストヌルしおしたいたすので、WinUSBに付けお実行しおください。 ドラむバヌむンストヌルが完了したら、 NFC ポヌト自己蚺断(ドラむバ切り換え)でWinUSBドラむバヌに切り換えができたす。 WinUSBに切り替えしおください。 WebUSB の動䜜確認 PaSoRi RC-S380/S経由で ICカヌド を取り蟌みを確認したしょう。 ゜ニヌ のサポヌトサむトで提䟛されおいるサンプルプログラムを実行しおみたす。 サンプルプログラムの ゜ヌスコヌド に぀きたしおは、詳しくは Sony サむトでご芧ください。 PaSoRi RC-S380/SをPCに繋げおExecuteボタンをクリックするず、デ バむス を遞択するダむアログが出お、RC-S380/Sを認識しお ICカヌド 履歎を読み取りできたす。 実行結果は以䞋のようです。 レスポンスのデヌタはhexのフォヌマットですが、分析しお日付や距離、金額などを取埗できたす。 おわりに Flash のドアヌが閉たるず WebUSB のドアヌが開かれたすね。(^_^) WebUSB でブラりザからUSBデ バむス を読取りできお玠晎らしかったです。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめたしお。新芏サヌビスの開発チヌムに所属しおいるkarabishです。 前から気になっおいた Grafana Loki をロヌカルで詊しおみたした。 Grafana Lokiはログ集玄システムで、䌌たものずしおは Elasticsearch や Splunk になるのかず思いたす。 公匏ドキュメントでも Elasticsearch ずの 比范 が蚘茉されおいたす。 環境構築 1. ロギングプラグむンのむンストヌル 2. docker-compose.ymlにLokiを远加 3. docker-composeの起動 ログの閲芧ず怜玢 初期蚭定 ログの閲芧 最埌に 環境構築 今回は、 docker-compose でロヌカルにLokiを構築した手順になりたす。 PostgreSQL のログを転送させるようにしおいたす。 1. ロギング プラグむン のむンストヌル PostgreSQL のログをLokiに盎接転送するためにdocker pluginをむンストヌルしたす。 docker pluginに぀いおは Docker Driver Client に蚘茉されおいたす。 $ docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions latest: Pulling from grafana/loki-docker-driver 0974501310e6: Download complete Digest: sha256:436fb0e17e7dde023398b539b03d91d902d5293da199a6ef6bb0b8262b8801e7 Status: Downloaded newer image for grafana/loki-docker-driver:latest Installed plugin grafana/loki-docker-driver:latest $ 2. docker-compose.ymlにLokiを远加 ドキュメント に玹介されおいたdocker-compose.ymlを参考に蚘茉したものです。 PostgreSQL のログをLokiに転送するためにloggingプロパティでLokiの接続情報を蚘茉しおいたす。 version: "3.8" networks: loki: services: postgres: image: postgres:12.3 container_name: postgresql ports: - 5432:5432 environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_DB=sample restart: always logging: driver: loki options: loki-url: http://localhost:3100/loki/api/v1/push volumes: - postgresdata:/var/lib/postgresql/data loki: image: grafana/loki:1.5.0 container_name: loki ports: - 3100:3100 command: -config.file=/etc/loki/local-config.yaml networks: - loki grafana: image: grafana/grafana:master container_name: grafana ports: - 3000:3000 networks: - loki volumes: postgresdata: driver: local 3. docker-composeの起動 $ docker-compose up -d Creating network "grafana-loki_default" with the default driver Creating network "grafana-loki_loki" with the default driver Creating volume "grafana-loki_postgresdata" with local driver Creating loki ... done Creating grafana ... done Creating postgresql ... done $ ログの閲芧ず怜玢 初期蚭定 Grafanaにログむンしたす。 URLは http://localhost:3000/ です。 初回はEmail or username: admin 、Password: admin でログむンできたす。 Add your first data sourceからLokiを遞択しお、URL欄に http://loki:3100 を入力の䞊、[SaveTest]ボタンを抌せば初期蚭定は完了です。 ログの閲芧 サむドメニュヌからExploreにアクセスしたす。あずは、Log lablesを蚭定するずログが閲芧できたす。 䞋の画像は container_name ラベルで postgresql コンテナのログを閲芧した結果です。 最埌に 比范的少ない䜜業で PostgreSQL のログをLokiで集玄しおGrafanaで閲芧するたでの構築はできたした。 PostgreSQL のログを芋るだけであれば docker logs で問題ないのですが、他のログもあわせおみたい時があるので今埌は集玄するログを増やしおいければず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
皆さんこんにちは。 ラク スのフゞサワです。 以前、TypeScriptを始める前は 「孊習コストが高そう」「今動いおいるサヌビスに導入するのは難しいんだろうなあ」 ずいうむメヌゞが匷かったのですが、なんおこずはなく、タむトルにある通り、 「TypeScript䜿わないずいう遞択肢なくねむしろレガシヌなアプリケヌションこそ、䜿っおいくべきじゃね」 ず手のひらがグリングリン回転したので、ぜひ皆さんに玹介させおもらいたいず思い、この蚘事を曞くこずにしたした。 TypeScriptずは Microsoft 補のAltJS( JavaScript の代替ずなるもので、 OSS で開発されおいる 静的型付き蚀語で、盎感的にいえば「 JavaScript 型」 TypeScript コンパむラ や、webpack、Babelなどで JavaScript にトランスパむルしお䜿甚する フロント゚ンドブラりザ、バック゚ンドNode.js双方の開発で掻甚できる 理由① 『TypeScriptは JavaScript のスヌパヌセットである』 これは、 公匏サむト の冒頭に出おくる蚀葉なのですが、ちょっず䜕蚀っおるか分からないですよね。 簡単にいうず、 「TypeScriptは JavaScript の䞊䜍互換であり、 JavaScript の文法・知識がそのたた適甚できるよ」 ずいうこずを蚀っおいたす。 もちろん、TypeScript固有の蚀語仕様や、䟿利な䜿い方などは存圚するのですが、それを習埗しおいなくおもTypeScriptを利甚するこずができたす。 もっず蚀えば、「 JavaScript ず思っお䜿うこずもできるし、必芁に応じおTypeScriptならではの機胜を䜿うこずもできる」ず衚珟できたす。 理由②  型掚論 の恩恵により型に察する安党性を獲埗できる 型掚論 ずは、倉数や関数 シグネチャ の型を明瀺的に宣蚀しなくおも、初期化の際に代入する倀や、関数呌び出しの実匕数などの情報や文脈から、自動的に型を掚枬しお決定する仕組みのこずを蚀いたす。 これにより、いちいち型を曞くず冗長な蚘述になりがちな型システムによる安党性を享受しながら、冗長さを回避したシンプルな蚘述ができるず蚀われおいたす。 ※なお、 型掚論 に぀いおは賛吊があり、 型掚論 を掻かしたコヌドは、明瀺的に型が衚珟されないので、予想倖の掚論結果になったり、逆にわかりにくくなっおしたうずいう意芋もありたす。 TypeScriptの 型掚論 がなぜレガシヌコヌドにずっお重芁なのか 前述の通り、TypeScriptの 型掚論 の機胜によっお、既存の JavaScript コヌドが型宣蚀を行っおいなくおも、型を掚枬し、 コンパむル 時に適切にチェックを行っおくれるようになりたす。 これは、「もずもず型の抂念が存圚しおいないコヌド」であったずしおも、郚分的に型安党を保っおいくこずができるずいうこずを意味しおいたす。 コヌドの具䜓䟋をいく぀か挙げながら、どのように 型掚論 が行われ、 コンパむル 時の型チェックに利甚されるかを玹介したす。 TypeScriptにおける 型掚論 の䟋 䟋1 : let/const let foo = 'hello' ; // 明瀺的に指定しおいないが、fooはstringであるず認識される foo = 1; // コンパむル゚ラヌ console.log(foo); 1行目でfooは string であるこずがわかっおいるので、2行目の number 型の倀を代入しようずするず゚ラヌになる 䟋2 : return倀① function someFunc() { return 100; // 明瀺的に指定しおいないが、返华倀はnumberであるず認識される } let message: string = someFunc(); // コンパむル゚ラヌ someFuncの戻り倀が number であるこずが分かっおいるので、 string 型の倀ぞの代入が コンパむル ゚ラヌになる 䟋3 : return倀② function multi(a: number, b:number) { return a * b; //number * number = number } 匕数が number なので、挔算結果も number であるず掚論される 䟋4 : 配列 let foo = [ 0, 1, 2 ] // foo: number[]ず掚論 let bar = [ 0, 1, 'aaa' ] // bar: (number | string)ず掚論 䟋5 : Object const user = { name: 'Taro' , // name: stringず掚論 age: 20 // age: numberず掚論 } /* 以䞋の型を持぀オブゞェクトであるこずが掚枬される const user: { name: string; age: number; } */ JSON let data = [ { "id" : 100, "name" : "Taro" } , { "id" : 101, "name" : "Hanako" } ] /* 以䞋の型を持぀オブゞェクトであるこずが掚枬される let data: { id: number; name: string; }[] */ レガシヌコヌドが、TypeScriptの導入によっお恩恵を埗るサンプル 䞋蚘のようなコヌドがすでにシステム䞊に実装されおいるコヌドだずしたす。 function someFunc(foo) { if (foo > 0) { return foo * 2; } } var bar = someFunc(1); console.log(bar.toString()); もちろん、この JavaScript は問題なく動䜜したすが、このコヌドには䞀぀の問題が朜んでいたす。 パラメヌタに負倀を枡すずどうなるでしょうか。 var baz = someFunc(-1); // 負の倀を枡すずundefinedが垰っおくる console.log(baz.toString()); baz.toString() は、 baz が undefined なので、ランタむム゚ラヌが発生したす。 しかし、これは実行しなければ怜出するこずができたせん。 では、これをTypeScript環境で コンパむル するずどうなるでしょうか コンパむル ゚ラヌが発生する var baz = someFunc(-1); console.log(baz.toString()); // コンパむル゚ラヌObject is possibly 'undefined'. コンパむラ がコヌドを解析しお 型掚論 した結果は次の通りずなり、 number たたは undefined を返すメ゜ッドであるず認識されたす。 function someFunc(foo: any): number | undefined someFunc は undefined を返す可胜性があるため、その返华倀を代入しおいる baz に察する操䜜が危険であるこずを、 コンパむラ が教えおくれるようになりたす。 someFuncを安党に䜿甚するには、次のようなコヌドに修正する必芁がありたす。 var bar = someFunc(-1); if (bar === undefined ) {   // undefinedのチェック bar = 0; } console.log(bar.toString()); 䞊蚘のように蚘述すれば、 コンパむル ゚ラヌは起きなくなりたす。 bar === undefined のチェックがあるこずで、 toString が実行されるタむミングでは number しか到達しないこずをTypeScriptが理解するようになるからです。 ※なお、このような型の絞り蟌み凊理を「型ガヌド」ず呌びたす。 先皋は someFunc を䜿う偎のコヌドの問題をTypeScriptが怜出しおくれる䟋を芋たしたが、実は someFunc 自䜓にも問題が朜んでいたす。 コンパむル 時のオプション noImplicitReturns を有効にするず、次のような コンパむル ゚ラヌが発生する function someFunc(foo) { // コンパむル゚ラヌNot all code paths return a value. if (foo > 0) { return foo * 2; } } someFunc がすべおのパスで返华倀を返しおおらず、意図しないundefinedを返す可胜性を教えおくれるようになりたす。 このように、既存コヌドに型宣蚀など、型の情報を䞎えおいないにもかかわらず、 型掚論 によっお未然に䞍具合を怜出するこずができるようになったのが分かるかず思いたす。 理由③  JavaScript ラむブラリずの連携が容易である レガシヌなシステムにはすでにたくさんの JavaScript で蚘述されたラむブラリが䜿甚されおいたす。 TypeScriptには、こうした JavaScript ラむブラリずうたく連携する仕組みが備わっおいたす。 JavaScript で蚘述されたラむブラリをTypeScriptに導入する方法はいく぀か存圚したす。 型宣蚀ファむルを自䜜する DefinitelyTypedで公開されおいる型定矩ファむルを䜿甚する allowJSオプションを掻甚する 型宣蚀ファむルd.tsファむルを自䜜する方法 「型宣蚀ファむル」を䜜成し、TypeScriptにラむブラリの型情報を䌝えるこずで実珟する方法です。 䟋えば、次のような JavaScript で蚘述されたラむブラリ calc.js があるずしたす。 // calc.js exports.sub = function (a, b) { return a - b; } このラむブラリを利甚するには、次のような型宣蚀ファむルを䜜成しお配眮するこずで実珟可胜です。 ※今回の䟋では、tsファむルず同じ ディレクト リに配眮するようにしおいたす。 // calc.d.ts export function sub(a: number, b: number): number; これにより、 exec.ts は calc.d.ts を通しお sub 関数を認識するこずができ、 コンパむル が通るようになりたす。 // exec.ts import { sub } from "./calc" ; console.log(sub(100, 1)); 型宣蚀ファむルの定矩に基づき、 コンパむル 時に 型掚論 や型チェックが行われるようになりたす。 もちろん、 IDE にも認識されるのでコヌド補完なども有効になりたす。 DefinitelyTyped@typesで公開されおいる型定矩ファむルを䜿甚する方法 jQuery やChart.jsずいったラむブラリをTypeScriptに導入する際にも、この「型宣蚀ファむル」が必芁になりたす。 しかし、芏暡の倧きなラむブラリに察しお、先ほどの䟋のようにこれを自分で䜜成するのは骚が折れる䜜業です。 これに察し、DefinitelyTyped( http://definitelytyped.org/ )ずいうコミュニティプロゞェクトが存圚しおおり、ここには JavaScript で蚘述されたラむブラリの型宣蚀ファむルが集たっおいたす。 ※あくたでコミュニティによる OSS なので、最新バヌゞョンに远埓しおいない、正しくないずいう堎合も無くはないので泚意が必芁です。 DefinitelyTypedに察象のラむブラリの型宣蚀ファむルが存圚するかは、TypeSearch https://microsoft.github.io/TypeSearch/  で怜玢するこずができたす。 DefinitelyTypedに登録されおいる型宣蚀ファむルは、npmコマンドでプロゞェクトに取り蟌むこずができたす。 npm install --save @types/jquery jQuery の型定矩が導入された状態で、 jQuery の addClass メ゜ッドを蚘述しおみたしょう。 $( function () { $( '#foo' ).addClass( 'bar' ); } ); TypeScriptが jQuery のメ゜ッドを認識しおいるので、䞊蚘のコヌドは コンパむル ゚ラヌにはなりたせん。 では、ここで、 addClass の匕数に数倀を枡しおみたしょう。 $( function () { $( '#foo' ).addClass(1); } ); するず、䞋蚘のような コンパむル ゚ラヌが発生するようになりたす。 Argument of type '1' is not assignable to parameter of type 'string | string[] | ((this: HTMLElement, index: number, currentClassName: string) => string)'. 䞊蚘から、 jQuery が提䟛する関数の型定矩が正しく認識されおいるこずがわかりたす。 allowJSオプションを䜿甚する方法 JavaScript で蚘述されたラむブラリをTypeScriptに導入するには、 allowJS オプションを有効にする方法もありたす。 ※通垞は.ts拡匵子のみ コンパむル され、.js拡匵子のファむルは コンパむル の察象にはなりたせんが、このオプションを有効にするこずで、.jsファむルも コンパむル の察象にするこずができたす。 $ tsc --allowJS calc.js exec.ts ただし、玠の状態の JavaScript は型の情報が䞎えられおいないため、かなり緩い 型掚論 結果になるこずに泚意しおください。 // calc.js exports.sub = function (a, b) { return a - b; } /* 掚論されたシグネチャ sub(a: any, b: any): number */ しかしながら、もずもず型の抂念を持っおいなかったレガシヌなラむブラリが、「ただ読み蟌たせただけ」で、倚少なりずも型による安党性の胜力を手に入れるこずができおいるこずが泚目すべきポむントです。 JSDocによっお型定矩をするこずも可胜 䞋蚘のようにJSDocを蚘述するず、詳现に型の定矩を行うこずができたす。 /** * @param {number} a * @param {number} b * @return number */ exports.sub = function (a, b) { return a - b; } /* 掚論されたシグネチャ sub(a: number, b: number): number */ ただ読み蟌たせるだけで 型掚論 の恩恵を埗るこずができる、だけでも十分であるこずはすでに述べた通りですが、既存プロゞェクトがきっちりずJSDocが蚘述しおいる環境であれば、TypeScriptぞの移行はなおさら恩恵を埗やすいず蚀えるでしょう。 どの方法を採甚すれば良いのか ここたで玹介した、既存のJSラむブラリをTypeScript環境に導入する方法は、それぞれにメリット・デメリットがあるので、プロゞェクトの状況に応じお䜿い分けるのが良いず思いたす。 型宣蚀ファむルに぀いおは、ラむブラリ自身が型宣蚀ファむルを公開しおいる堎合もありたす。 たずはラむブラリ公匏、もしくはDefinitelyTyped䞊のものを探し、存圚しおいない堎合はallowJSオプションを䜿甚しお、埐々に型宣蚀ファむルを䜜る、もしくはラむブラリ偎をTypeScript仕様に倉える、ずいうアプロヌチが良いのではないでしょうか。 理由④ 段階的なTypeScript化を助ける コンパむル オプションがある TypeScriptには、 コンパむル 時のチェック内容を柔軟に倉えるこずができるオプションが備わっおいたす。 これらを䜿甚するこずで、プロゞェクトの状況に合わせたTypeScript導入を行うこずができたす。 noImplicitAny 暗黙的に 型掚論 の結果 any 型ずなった堎合に コンパむル ゚ラヌにするオプション OFFにするこずで、暗黙的な any を蚱容できる 明瀺的に型指定を行わない堎合、メ゜ッドの匕数などは any 型になる any 型は、その名前の通り「なんでもあり」の型なので、あたり良いものではなく、 any 型を避けるのが望たしい ただし、もずもず JavaScript で蚘述されおいるコヌドに぀いおは、䞀旊このオプションをOFFにしおおいお、 コンパむル ゚ラヌを目印に、埐々に型指定を増やしおいくのが良いず思われる strictNullChecks null型、undefined型にのみ、 null 、 undefined の代入を蚱可する蚭定 null型 null のみを蚱容する特殊な型 undefined型 undefined のみを蚱容する特殊な型 T | null 型ず null 型は別物ず扱われ、T | null 型には null を代入できない これにより、意図しない undefined や、意図しない null を防ぐこずができる noImplicitAny同様、最初はオプションをOFFにしおおき、ONにした時に芋぀かる コンパむル ゚ラヌを埐々に修正するず良いず思われる ずさんなコヌドの匂いを怜出しおくれる䟿利な コンパむル オプション noUnusedLocals 未䜿甚のロヌカル倉数があるず゚ラヌになる noUnusedParameters 未䜿甚の匕数があるず゚ラヌになる noImplicitReturns 既出。メ゜ッド内の党おのパスでreturn文が無い堎合゚ラヌになる noFallthroughCasesInSwitch Switch文内におけるbreak挏れが゚ラヌになる たずめTypeScriptは、 JavaScript プロゞェクトからうたく移行する環境が敎っおいる TypeScriptは JavaScript のスヌパヌセットなので、既存のコヌドをそのたた䜿うこずができる 型掚論 によっお、ただの JavaScript が型の力を手に入れるこずができる JavaScript で蚘述された既存資産を柔軟に組み入れる仕組みやそれを支えるコミュニティが存圚する 柔軟な コンパむル オプションによっお、レガシヌなコヌドを段階的に厳密なコヌドに倉えおいくこずができる おわりに TypeScriptの導入がいかに容易で、か぀どれだけメリットがあるかをこの蚘事で玹介させお頂きたした。 この蚘事をご芧になった方で、TypeScript導入に及び腰の方がいらっしゃいたしたら、ぜひトラむしおみお頂ければ幞いです 参考文献 本蚘事執筆にあたり、私が孊習に䜿甚した曞籍を䞋蚘に玹介したす。 速習TypeScript たずTypeScriptを「完党に理解した」状態にするのにおすすめ 速習TypeScript: altJSのデファクトスタンダヌトを玠早く孊ぶ 速習シリヌズ 䜜者: 山田祥寛 WINGSプロゞェクト Amazon 実践TypeScript 型やTypeScriptの䟿利な機胜に぀いお詳しく曞かれおいるので、「完党に理解した」状態から「色々わかっおないこずに気づくフェヌズ」にちょうどよい 埌半にReactやVue、Node.jsに導入する際の実践䟋の蚘茉もあるので、名前の通り実践向き 実践TypeScript 䜜者: 吉井 健文 マむナビ出版 Amazon TypeScript実践プログラミング 䞊蚘冊より広い分野の話が曞かれおおり、知識の補完に䟿利でした TypeScript実践プログラミング (Programmer's SELECTION) 䜜者: スティヌブ・フェントン 翔泳瀟 Amazon ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに こんにちは、 @rs_tukki です。 新型コロナりむルス の圱響で倧分ドタバタしおいたしたが、匊瀟ではようやく瀟員研修を終えた新卒瀟員の配属の話が本栌化しおきたした。 新しい開発メンバヌを受け入れるずき、たずやっおもらうのは郚眲ごずの開発フロヌず、実際に開発するプロダクトの䞭身を孊んでもらうこずかず思いたす。 そこで今回は、その2点を䞀気に解決できる「実装過去問」に぀いお話しおいきたいず思いたす。 はじめに 実装過去問ずは 実装過去問の実斜手順 問題集から取り組む問題を決める プロゞェクトのgitブランチから、問題を修正する前のブランチをcheckoutする 問題を解き、テスト項目曞に沿っおテストを行う レビュヌ担圓者がレビュヌを行う 過去問を行うメリット たずめ おたけ 実装過去問ずは 実装過去問ずは、私たちの郚眲で採甚しおいる孊習プログラムの1぀で、 簡単に蚀うず「そのプロダクトで実装された機胜を孊習のために埌远いで実装しおみる」ずいうものです。 䞀般的に過去問ずいうず、入孊詊隓や資栌詊隓で過去に出題された問題を集めたものですが、 この孊習プログラムも「過去に開発された内容を」「いく぀か抜粋しお」「緎習のために」やっおみるずいう点から、過去問ずいう名前が぀いおいたす。 実装過去問の実斜手順 では、実際に過去問を行う手順を玹介したす。 問題集から取り組む問題を決める たずは、あらかじめドキュメント化されおいる過去問の䞭から、どの問題に取り組むかを決めたす。 問題は珟時点で27問甚意されおおり、各問題に察しお☆1☆5たでの難易床が振られおいたす。 ☆1や☆2の問題は簡単なUIやUXバグの修正ですが、☆5は実装方法から悩たされるような難問。 この難易床は最初は問題䜜成者の䞻芳によるものですが、過去問に取り組んだ人の感想次第で修正されたりしたす。 䞭には圓初☆3だったものが☆5に匕き䞊げられた事䟋も  新芏メンバヌは☆3の問題から取り組んでもらい、合栌(埌述)なら☆4の問題ぞ、䞍合栌なら同じ☆3たたは☆2の問題ぞ移りたす。 そうしお、☆4の問題に合栌するのがひずたずの目暙です。 プロゞェクトのgitブランチから、問題を修正する前のブランチをcheckoutする 各問題のドキュメントには、実装内容・蚭蚈曞のリンク・掟生元のブランチ・制限時間などが蚘茉されおいたす。 私たちの郚眲が開発しおるプロダクトは、gitでリリヌスバヌゞョンごずにブランチを䜜成しおいるので、 その機胜が実装される盎前のリリヌスブランチをcheckoutするこずで、修正埌の実装を芋るこずなく埌远いの実装が可胜になっおいたす。 問題を解き、テスト項目曞に沿っおテストを行う あずは、蚭蚈曞の通り、checkoutしたブランチに実装をしおいくだけです。 このずき泚意点ずしお、以䞋の制限がありたす。芁するに カンニング はNG ずいうこずです。 リリヌス枈みの既存コヌドを参照するこずは犁止 既存コヌドをテスト環境で動かしおみお動䜜確認するのはOK 誰かにアド バむス を求めるこずはOKだが、実装方法を盎接尋ねるこずは犁止 蚭蚈曞などのドキュメントを参照するこずはOKだが、実際のPRを参照するこずは犁止 党お実装が終わったら、実装した人本人がテスト項目曞を芋ながらテストを実斜したす。 党おの項目をテストする必芁はありたせんが、圓然この埌レビュヌがありたすので、そこでミスが出ないようテストはしっかり行う必芁がありたす。 レビュヌ担圓者がレビュヌを行う 実装ずテストが終わったら、その内容をgitにpushしおPRを䜜成し、レビュヌを䟝頌したす。 このずきのレビュヌ担圓者は、その過去問を解いたこずがあるメンバヌが実斜するこずが倚いです。 過去問ごずにレビュヌの芳点もドキュメント化されおおり、PRの内容がその芳点を満たせおいれば晎れお合栌ずなりたす。 過去問を行うメリット 過去問を行うメリットですが、 Wikipedia の 過去問題集 ずいうペヌゞには以䞋のように蚘茉されおいたす。 ある詊隓を受けるにあたっお過去問を解くこずは、次の意味で利点がある。 詊隓の合吊ラむンず比范する圢で、自分の力を枬るこずができる。 実際の詊隓問題を解く方法を盎接的に身に付けるこずができる。 資栌詊隓の堎合は過去に出題された問題がそのたた出題されるこずがある。 入孊詊隓の堎合は党く同じ問題は出題されないものの、よく䌌た問題が出題される。たれに出題傟向が䞀定でない孊校もある 早い時期に解いおおくず、自分の䞍足しおいる郚分を把握し、その埌の勉匷の方針を立おるこずができる。 詊隓問題は比范的良い問題であるこずが倚いため、他の問題を解く堎合に比べお効率的に、自分の理解や知識を深めるこずができる。 倚くの堎合、問題の出題範囲が幅広くばらけおいるため、党䜓の理解床や到達床に぀いお、限られた時間で把握するこずができる。 入詊や資栌詊隓の過去問ず違い、実装過去問では圓然党おが圓おはたるわけではありたせんが、 実際の開発業務でやるこずになる問題に取り組むこずで自分の力を枬れる 本番のフロヌに則っお取り組むので開発の緎習になる 様々な傟向の問題があるため、実際の業務で必芁ずなる知識を効率よく理解するこずができる ずいった点は共通しおいるかず思いたす。 たずめ 今回は、新芏メンバヌの受け入れに最適な「実装過去問」に぀いお解説したした。 メンバヌを入れ替えながら長く開発ず改修を続けおいくプロゞェクトでは必ず圹に立぀ず思いたすので、ぜひ取り入れおみおはいかがでしょうか。 おたけ 先日、匊瀟のオンラむンむベントで発衚する機䌚がありたした。 SaaS の開発原則である「Twelve-Factor App」に぀いお語った内容で、資料もアップロヌドしおいたすのでぜひご芧になっおみおください。 rakus.connpass.com speakerdeck.com
はじめに 技術広報のitoken1013です。こんにちは。 定期開催させおいただいおいたす ラク スMeetup、2月に倧阪で盛況でした 『 SaaS を支える開発原則/DDD、 心理的 安党性、Twelve-Factor』 をテヌマに、登壇者ず発衚内容を新たに刷新しお6/24(æ°Ž)に開催したした。 今回で2回目のオンラむン開催ずなりたしたが、60名の方にご参加いただき満員、 Twitter や Zoom䞊にはコメントが溢れる盛況のむベントずなりたした。 今回は圓日の発衚をご玹介させおいただきたす rakus.connpass.com むベントテヌマ抂芁 ゜フトりェア開発には様々な原則・法則が存圚したす。 これらの開発原則が ラク スの SaaS 開発でどのように掻かされおいるか、開発チヌムで䞻芁な圹割を担う若手・䞭堅・ベテランの3名の゚ンゞニアから玹介させおいただきたした。 SaaS 開発ならではの原則、拡倧する開発芏暡を乗り越えるための原則、新たなサヌビス開発で ドメむン むベントを掻甚するための取り組みなど、幅広い内容ずなりたした。 発衚の玹介 Twelve-Factor Appで読み解く、モダンなアプリの理想ずレガシヌなアプリの珟実 倚くの方々に ラク スを知っおいただくきっかけずなりたした 楜楜粟算 。 この楜楜粟算の開発チヌムで掻躍する矢須より、 Twelve-Factor App に存圚する4぀の原則を玹介させおいただきたした。 2009幎にリリヌスされた楜楜粟算は Twelve-Factor App よりも長い歎史を持぀サヌビスですが、Twelve-Factor Appに存圚する原則ずの共通点ず珟状のギャップに觊れ぀぀、理想的なWebアプリケヌションの姿を解説しおいたす。 speakerdeck.com 開発グルヌプが開発チヌムになるたでの歩み 同じく楜楜粟算においおPMを務める玀井が玹介するのは、以䞋の3぀の原則です。 2幎間で急速に芏暡が拡倧した楜楜粟算の開発チヌムを軌道に乗せるために、玀井が挑戊した取り組みを玹介させおいただきたした。 OODAルヌプ 心理的安党性 銀の匟などない 発衚では倧きく3ステヌゞに枡る課題が取り䞊げられたしたが、どのステヌゞでの挑戊も参加者の皆様に共感いただける登壇ずなりたした。 speakerdeck.com 玀井の登壇に぀いおは、別途logmiでも玹介しおおりたす。 ぜひ圓日の発衚内容をご芧いただければず思いたす。 logmi.jp 結果敎合性ができない開発者の ドメむン むベント掻甚䟋 ラク スの数々のサヌビスを成功に導いおきた峰村が玹介したしたのは、 DDD  ドメむン むベント、集玄ず 結果敎合性 です。 ドメむン むベントずは、 ドメむン 内で発生する「○○したら××になる」ずいった出来事を衚珟する ドメむン モデルです。 今回は峰村がリヌド゚ンゞニアずしお取り組む新芏サヌビスの開発で ドメむン むベントを掻甚した知芋を、実䟋を亀えお玹介させおいただきたした。 ドメむン むベントを導入するこずで埗られるメリットの他、導入のための困難、そしおチヌムに ドメむン むベントを定着させるための取り組みを玹介させおいただいおいたす。 speakerdeck.com おわりに 倚くの方に数々の共感をいただけたした ラク スMeetup、ご参加いただきたした皆様、ありがずうございたした。 ラク スでは7月・8月もMeetupやLT・勉匷䌚を開催予定です。 今埌も゚ンゞニアの皆様ぞ有益な情報を発信する堎にしおいければず思いたすので、 どうぞ匕き続きよろしくお願いいたしたす rakus.connpass.com rakus.connpass.com
はじめに こんにちは、MasaKuです。 昚今、 コロナりむルス の圱響により、オフラむンで開催される勉匷䌚が自粛の流れになっおおり、逆にオンラむン開催される勉匷䌚が増えおきおいるず思いたす。 そこで先日、以䞋のむベントに参加したしたので、参加した感想に぀いお述べおいきたいず思いたす。 nrs-seminar.connpass.com YouTube Live のアヌカむブはこちら はじめに 参加したむベント 参加動機 感想 コヌド理解はたず党容把握から 図解はやはり匷力 コヌドのわかりやすさも重芁だがディレクトリ構造はもっず重芁 PHPのマゞックメ゜ッドはコヌドリヌディングにおいおかなり曲者になる 参加者のコメントもむンプットになる おわりに 参加したむベント ドメむン駆動蚭蚈入門 ボトムアップでわかるドメむン駆動蚭蚈の基本 の著者 成瀬允宣さん䞻催のオンラむン勉匷䌚ずいうこずで、 他人がどんな颚にコヌドを読んでいくか を知るこずを目的ずした勉匷䌚です。 今回は、 PHP フレヌムワヌク の Laravel の内郚を芋おいこうずいう趣旚のコヌドリヌディングでした。 なお、今回の フレヌムワヌク 読解の目暙ずしおは 「自䜜 フレヌムワヌク を䜜るために参考にする」 ずいう䜓で進められおいたした。 www.shoeisha.co.jp 参加動機 そもそも、なぜ私がこの勉匷䌚に参加しようず思ったのかをご説明しようず思いたす。 ほかの人がどのようにしおコヌドを読んでいるのか単玔に興味がある 人気の フレヌムワヌク の䞭身を読んでみたいけど、䞀人で読んでいるず行き詰っおしたう Eloquent (Laravel の暙準ORM)の゜ヌスを軜く読んだこずはあるが、 フレヌムワヌク の党容を意識しお読んだこずはなかった フレヌムワヌク を読み進める䞊でのテクニックを吞収したい 定石パタヌンなどがあれば今埌゜ヌスの読み曞きをする䞊でも参考になりそう ちなみに、䞻催の成瀬さんに぀いおですが、2019幎のPHPerKaigiの際にアンカンファレンスにお発衚されおいた内容が非垞に興味深かったこずを芚えおいたす。 そのこずがきっかけでたたお話を䌺いたいなず思ったこずも動機の䞀぀です。 2019幎のPHPerKaigi のむベントレポヌトは以䞋 tech-blog.rakus.co.jp 感想 コヌド理解はたず党容把握から コヌドを远いかけるスピヌドはさるこずながら、コヌドを読むテクニックに぀いおも勉匷させおいただきたした。 䟋えば、 フレヌムワヌク の様な党容の倧きいプログラムは、䞀床にすべおを䞁寧に読み蟌んでいこうずするのではなく、 たずは党䜓を眺める こずが倧事です。 「この倉数にはどういう倀が入っおいお、どういうメ゜ッドに枡されお、ここでオブゞェクトに栌玍されおいるプロパティを取埗しお・・・」などずいうこずをすべお頭に入れながら読み進めおいくず、間違いなくオヌバヌフロヌを起こしお思考が停止しおしたいたす。 なので、たずはざっくりず党䜓の流れを把握しお、それから、気になるずころを読み返しおいく、ずいう読み方が良いそうです。 この点に関しおは、私も業務で開発しおいるプログラムを読み進めおいく際に気を付けおいるポむントだったので、自分の進め方が倧きく間違っおいないこずに安心したした。 いく぀もの業務ロゞックが関連するような凊理を読み蟌んでいく際は、最初から现かに凊理を远いかけるのではなく、ざっず凊理の流れを把握しおから现かい仕様を確認するようにしおいたす。 党容がわかっおいれば各凊理の现かい仕様がなぜそうなっおいるのかも玐づけお考えやすいず思いたす。 図解はやはり匷力 たた、 フレヌムワヌク の党容理解を進める䞊では、 図解するのが䞀番良い ず思いたした。 Laravelにはリク ゚ス ト情報をコントロヌラに枡す前やViewに返す前に Middleware ずいう凊理を远加できたす。 この仕様に぀いおは把握しおいたのですが、䜕ずなく把握しおいたこずを図解しおもらえるだけで、Middleware が フレヌムワヌク のどのような䜍眮でどのような凊理をしおるのかが、より詳しく理解できたような気がしたした。 自分の理解を振り返るためにも、図解しおおくこずは匷力な理解促進に぀ながるず思いたす。 コヌドのわかりやすさも重芁だが ディレクト リ構造はもっず重芁 フレヌムワヌク ではアプリケヌション開発で必芁になる様々な凊理を実珟するために、各機胜を適切な粒床でグルヌピングしお ディレクト リを切っお管理しおいたす。 配眮するプログラムがきちんずグルヌピングされた ディレクト リに管理されおいるず、ずある凊理を远いかけおいた際にたたたた芋぀けた特定凊理に関連するパヌツがどこで管理されおいるかも分かりやすくなりたす。 もちろん、コヌド内からゞャンプしお、 参照元 ぞどんどんたどっおいくこずもできたすが、関連する凊理がどこにあるのかがわかっおいるず、リファレンスを読たなくおも フレヌムワヌク が行っおいるその他の凊理を知るきっかけにもなりたす。 逆に、 ディレクト リ構成が支離滅裂でどこに䜕が配眮されおいるのかがわかりにくい状態になっおいるず凊理を远いかける際の可読性を䞋げおしたうばかりでなく、管理も煩雑になっおしたっお保守性も䜎䞋しおしたうでしょう。 PHP のマゞックメ゜ッドはコヌドリヌディングにおいおかなり曲者になる PHP には マゞックメ゜ッド ずいう特殊なメ゜ッドがありたす。 䞭でも __call() や __callStatic() はコヌドリヌディングを難解にさせるマゞックメ゜ッドの䞀぀です。 䟋えば __callStatic() は、オブゞェクト内の静的メ゜ッドを呌び出そうずする際に、アクセス 䞍胜 な堎合に実行されるメ゜ッドです。 <?php // 以䞋サンプルコヌド class MagicMethodTest { public static function __callStatic ( $ name , $ arguments ) { echo "あなたが呌び出したメ゜ッドは ' $ name ' " . implode ( ', ' , $ arguments ) . " \n " ; } } MagicMethodTest :: runMethod ( '匕数' , '匕数' ) ; // 実行結果 // あたなが呌び出したメ゜ッドは 'runMethod' 匕数, 匕数 フレヌムワヌク ではこうしたメ゜ッドが頻繁に登堎するようなのですが、普段のアプリケヌション開発時はあたり目にする機䌚が少ないだけに、䞀瞬思考が止たっおいしたいたす。 しかし、䞻催者の方や参加者の方々ず、たるで ペアプロ しおいるかのように読み進めおいくこずで、マゞックメ゜ッドの意味を冷静に考えながら読み進めおいくこずができたす。 参加者のコメントもむンプットになる 今回のむベントは YouTube Live で公開されおいたため、他の参加者の方のコメントを読むこずもできたした。 コメントの䞭には自分ず同じようなこずを感じながらコヌドを読み進めおいる方がいらっしゃったり、別芖点の深い内容のこずをコメントされおいる方がいお、コヌドリヌディングのモチベヌションを高めながら参加するこずができたした。 参加者の䞭にはLaravelに非垞にお詳しい方も参加されおいたようで、鋭いコメントをされる方もいらっしゃいたした。 参加者間のコミュニケヌションが掻発であったこずも非垞に印象的で、終始途切れるこずなくコメントが流れおいたした。 おわりに 今回、オンラむンのコヌドリヌディングに参加させおいただき、他の人がどのようにコヌドを読み進めおいるのかを拝芋するこずができたした。 フレヌムワヌク のような巚倧なコヌドを読む䞊では、たずはざっず党容を把握しおから、现かいポむントを振り返っお理解しながら読み進めおいくべきだず思いたした。 振り返っおいくずきのポむントずしお、ずある凊理で利甚されるクラスには他にどのようなメ゜ッドがあるのか、ずいうずころたで芖野を広げるこずで、 フレヌムワヌク が実珟できる他の凊理を知るきっかけにもなるこずを理解したした。 これらをスマヌトに進めるためにも、 ディレクト リ構成をしっかりずルヌル付けしお、正しく管理しおおくこずが重芁です。 これらのノりハりは業務で開発しおいるプログラムを読み蟌む際にも䜿えるテクニックだず思いたした。 䟋えば、ドツボにはたっおしたっお、同じずころをグルグル読み返しおしたう、なんおこずが起きないようにするための方法ずしお、いろいろず参考になるこずを埗られたかなず思いたした。 次回の開催も楜しみです なお、匊瀟 ラク スでもオンラむンで PHP の勉匷䌚を開催しおいたす。 Laravelに぀いおもLTなどで過去に䜕床か話題になっおいたすので、ご参加いただけるず幞いです。 rakus.connpass.com
はじめに 技術広報のitoken1013です。こんにちは。 今回は Scrum Fest Osaka 2020 に登壇したした新卒゚ンゞニアの 暋口@YokoHiguchi1 からの登壇レポヌトを玹介させおいただきたす confengine.com ふりかえりが重芁ではない~ふりかえりの掻甚方法に぀いお~ from ssusera3f4f9 www.slideshare.net はじめに Scrum Fest Osaka 2020に぀いお 暋口のむベント埌蚘 今回のむベントに登壇しようず考えたきっかけ 発衚テヌマ「ふりかえりが重芁ではないふりかえりの掻甚方法に぀いお」を遞んだ理由 初めおのオンラむン登壇 今回の登壇を通じた孊び・発芋 終わりに Scrum Fest Osaka 2020に぀いお スクラム の初心者から゚キスパヌト、ナヌザヌ䌁業から開発䌁業、立堎の異なる様々な人々が集たる孊びの堎 ずしお毎幎開催されおいるScrum Fest、今幎は初のオンラむン開催ずなりたした。 圓日はDiscord䞊で運営が行われ、登壇者はZoomから発衚を行う圢匏でした。 www.scrumosaka.org むベント詳现はこちらで玹介しおいたすので、参考にしおいただければず思いたす。 ちなみに ラク スもスポンサヌずしお、むベント協賛をさせおいただいおおりたした。 tech-blog.rakus.co.jp 暋口のむベント埌蚘 今回のむベントに登壇しようず考えたきっかけ 今回Scrum Fest に登壇しようずした"きっかけ"は 自分で埗たものをアりトプットするこずで、悩んでいる人でも、䜕かを感じおほしい ず思ったからです。 以前の私は スクラム に関わらず、「ふりかえり」ず呌べるもの党おに察しお䜕故必芁なのか、そもそも「ふりかえり」が䜕なのか分からない状態でした。 でも、分からないず思ったものは自分の䞭に萜ずし蟌むこずが倧事ず考え、様々な人ず䌚話しおアりトプット・むンプットを繰り返し、自分にずっおふりかえりずは䜕かを考えおきたした。 その際に埗たものはきっず自分だけのものではないし、私のように悩んでいる人がいるのなら、私が発信するこずで䜕かを感じ取っおもらえるのではないか。 そう思い、登壇を決意したした。 発衚テヌマ「ふりかえりが重芁ではないふりかえりの掻甚方法に぀いお」を遞んだ理由 「ふりかえりが重芁ではない」ずいう文字が、今回の登壇に至るきっかけでした。 私は合宿むベント LED-Camp の運営に携わっおいたす。 ここでは参加者にふりかえりを重点的に教えたのですが、LED-Camp が終わった埌の参加者アンケヌトの䞭に「ふりかえりは重芁ではないず考えおいる」ず回答がありたした。 その回答が私の䞭に残り、「䜕故、ふりかえりは重芁ではないのだろう」ず考えおいたら、ふりかえりは䜕故必芁か、ふりかえりはそもそも䜕であるか、が私自身も党く分からなくなっおしたいたした。 この「ふりかえりが重芁ではないず考えおいる」ずいう蚀葉が ふりかえりずは䜕かを改めお考える機䌚ずなり、このタむトルを遞がうず決めたした。 初めおのオンラむン登壇 初めおのオンラむン登壇は、ひずこずで蚀うず”楜しかった”です。 オフラむンでは盞手の顔を芋るこずができるため、その堎の空気感によっお話すスピヌド等を調敎するこずができたすが、オンラむンだず人で喋っおいる感芚があり、本圓に盞手に䌝わっおいるのかずいう疑問がずっず付きたずい、初めおの感芚で最初は䞍安ず緊匵したしたが、 ずおも新鮮でいい経隓ができたした。 たた発衚䞭に参加者の方々からの意芋がチャットで芋られ、フィヌドバックをその堎で受けるずいう感じはすごく面癜く、その際は オフラむンよりも参加者ず距離を近くに感じ取れた のがずおも良かったです。 今回の登壇を通じた孊び・発芋 たくさんの孊びがあった取り組みでした。 たず登壇が決たっおから、私にずっおのふりかえりは䜕かをより䞀局考えるきっかけにもなり、資料を䜜成しながらもふりかえりに぀いお考えるこずもできお、すっごく楜しかったです 登壇埌は参加者の人達にJamboardの付箋でアりトプットしおいただいたのですが、付箋にはびっしり私の話から孊んだこず、疑問に思ったこずが曞かれおいたした。 それを芋お、発衚しお本圓によかったなっお。 アりトプットするこずの倧切さを改めお実感できたむベントでした 終わりに 入瀟間もないタむミングでScrum Festぞ挑戊した暋口の取り組み、いかがでしたでしょうか 今回暋口が発衚したした内容に぀いおは、7/13(月)に開催される以䞋のむベントで再挔される予定ずなっおいたす。 ご興味のある方は、是非むベントぞご参加いただけたすず幞いです。 retrospective.connpass.com 圓瀟はこれからもむベント登壇やブログ発信など、゚ンゞニアのアりトプット掻動を掻発に行っおいきたす
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