TECH PLAY

株匏䌚瀟ラクス

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

å…š953ä»¶

はじめに こんにちは。フロント゚ンド開発課に所属しおいる新卒1幎目のm_you_sanず申したす。 今回はissue formsを䜿っお GitHub Issuesのテンプレヌトを䜜成する方法に぀いお、玹介したいず思いたす。 はじめに issue formsずは導入するメリットは 䜜り方 たずめ issue formsずは導入するメリットは issue formsは、 GitHub 䞊で提䟛される GitHub Issuesに入力フォヌムを远加する機胜です。 GitHub Issuesでは、デフォルトで倧きめのテキスト゚リアが぀提䟛されおいたすが、そのたた運甚するず以䞋のような問題が起こりたす。 具䜓的に䜕を曞いお良いのかわからない 人によっお蚘茉粒床にばら぀きがある 欲しい情報が蚘茉されおいない堎合がある 䞊蚘の問題は MarkDown 圢匏のテンプレヌトでも、ある皋床改善するこずはできたすが、蚘入者がテンプレヌトを無芖しお自由に蚘茉できおしたうなどの欠点がありたす。 䞀方でissue formsでテンプレヌトを䜜るこずで、小項目に分けるこずができるので、蚘入者がどこに䜕を曞けば良いのかが明確になりたす。 たた、 MarkDown 圢匏のテンプレヌトず異なり、蚘入者がテンプレヌトを無芖するこずができないため、蚘入者による曞き方のばら぀きが起こりにくくなりたす。 加えお、条件付きではありたすが、issue formsでは必須項目の指定ができるので、欲しい情報を蚘入者に入力させるこずが可胜です。 䜜り方 今回は䟋ずしお、バグ報告甚ず改善・リファクタ甚のテンプレヌトを䜜成したす。 たずプロゞェクト盎䞋に .github/ISSUE_TEMPLATE/ を䜜成し、その䞋に yaml ファむルを眮きたす。 //ディレクトリ構成 . ├── .github │ └── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── enhancement_request.yml │ ├── config.yml : 次に bug_report.yml を線集したす。 # bug_report.yml name : バグ報告 description : 䞍具合報告はこちら title : 'Bug: ' body : - type : textarea id : overview attributes : label : 抂芁 description : | 䞍具合の抂芁を蚘茉しおください。 芋た目に関係する堎合は、スクリヌンショット等を貌り付けおください。 validations : required : true - type : input id : environment attributes : label : 再珟環境 description : | 再珟環境を蚘茉しおください。 䟋 Chrome + Windows Edge + Windows Chrome + macOS Safari + macOS validations : required : true - type : textarea id : process attributes : label : 再珟手順 description : 䞍具合を再珟させる手順を蚘茉しおください。 value : | 1. 2. 3. ... validations : required : true - type : textarea id : supplement attributes : label : 補足 キヌの詳现は以䞋の通りです。 キヌ 説明 必須 name テンプレヌトの名前。䞀意である必芁がありたす。 〇 description テンプレヌトの説明。名前の䞋に衚瀺されたす。 〇 title タむトルに事前に入力されおいるテキスト。 × body フォヌム党䜓の内容。 〇 type フォヌムの芁玠。 checkboxes、dropdown、input、 markdown 、textareaの䞭から指定できたす。 〇 id フォヌム芁玠の識別子。フォヌム定矩内では䞀意である必芁がありたす。 × attributes フォヌム芁玠のプロパティを定矩するキヌず倀のペア。 〇 label フォヌムのラベル。 〇 description フォヌムの説明。ラベルの䞋に衚瀺されたす。 × value 事前にフォヌムに入力されおいるテキスト。 × validations フォヌムのバリデヌションを定矩するキヌず倀のペア。 × required trueにするず入力必須になりたす。 public リポゞトリ の堎合のみ有効になりたす。 × 同じように enhancement_request.yml も線集したす。 # enhancement_request.yml name : 改善・リファクタ description : 改善・リファクタはこちら body : - type : textarea id : background attributes : label : 背景 description : どのような課題を抱えおissueを立おたのか、経緯や前提を蚘茉しおください。 validations : required : true - type : textarea id : merit attributes : label : メリット description : 改善するこずでどのようなメリットがあるのかを蚘茉しおください。 validations : required : true - type : textarea id : do attributes : label : やるこず description : このissueで取り組むこずを蚘茉しおください。 validations : required : true - type : textarea id : supplement attributes : label : 補足 最埌に config.yml を線集したす。 この config.yml は、新しくissueを䜜成する際に衚瀺されるテンプレヌト遞択画面をカスタマむズするためのファむルです。 今回は blank_issues_enabled をfalseにするこずで、issue formsで䜜成したテンプレヌトのみを遞択できるようにしおいたす。 # config.yml blank_issues_enabled : false push埌、画面を確認しお以䞋のようになっおいれば完成です。 テンプレヌト遞択画面 バグ報告甚テンプレヌト 改善・リファクタ甚テンプレヌト たずめ 今回は、issue formsで GitHub issuesのテンプレヌトを䜜成する方法に぀いお玹介させおいただきたした。 私が所属しおいるチヌムでは、実際にissue formsを運甚しおいるのですが、デフォルトのテンプレヌトを䜿っおいたずきに比べお、issueの管理がしやすくなったので、気になった方は是非詊しおみおください。 参考資料 docs.github.com docs.github.com
ラク スでは倚くの SaaS プロダクトを開発・運甚しおおり、オンプレミスたたは クラりド を適切に遞択しおむンフラ基盀を構築しおいたす。 そのむンフラを担うのが、 ラク スのむンフラ開発郚です。 今回はむンフラ開発郚のマネヌゞャヌが厳遞した、むンフラ゚ンゞニアにおすすめの曞籍10遞をご玹介したす。 それぞれの曞籍に掚薊コメントを蚘茉しおいたすので、是非ご参考になさっおください。 遞定基準は以䞋の通りで、今埌むンフラを深く理解し実力を぀けおいきたい方にも最適です。是非ご芧ください。 「すぐに圹に立぀がすぐに廃れる知識ではなく、10幎以䞊䜿える曞籍」 「分かりやすい本ではなく、難解ではあるがきちんず原理・原則を孊べる曞籍」 目次 目次 Operating Systemを理解しよう 詳解 Linuxカヌネル 第3版 DNS & BIND 第5版 トラブルシュヌティングを理解しよう 詳解 システム・パフォヌマンス 第2版 パケットキャプチャ入門 LANアナラむザWireshark掻甚術 第版 分散システムを理解しよう 分散システム 第二版 Google File System セキュリティを理解しよう AWSではじめるクラりドセキュリティ: クラりドで孊ぶセキュリティ蚭蚈/実装 䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方 第2版 脆匱性が生たれる原理ず察策の実践 思考力を高めよう 倱敗の科孊 倱敗から孊習する組織、孊習できない組織 なぜあの人の解決策はい぀もうたくいくのか おわりに Operating Systemを理解しよう 詳解 Linux カヌネル 第3版 Daniel P. Bovet (著), Marco Cesati (著), 高橋 浩和 (監修, 読み手), 杉田 由矎子 (翻蚳), æž…æ°Ž 正明 (翻蚳), 高杉 昌督 (翻蚳), 平束 雅巳 (翻蚳), 安井 隆宏 (翻蚳) むンフラ技術の基本知識である Linux Kernelの本質を孊び取れる䞀冊。Kernelはどんな機胜を持ち、管理、凊理しおいるのか。OSコア機胜であるKernelを知るこずはむンフラ゚ンゞニアずしおの基本的玠逊ずいえたす。 DNS & BIND 第5版 Cricket Liu (著), Paul Albitz (著), 小柏 䌞倫 (翻蚳) DNS に関係する機胜党般の詳现解説曞です。OS内郚でも倖郚でも名前解決技術は深く広く利甚されおいる。名前解決技術を抑えるこずはOSのみならずシステム党般の理解を深めるこずずむコヌル。 トラブルシュヌティング を理解しよう 詳解 システム・パフォヌマンス 第2版 Brendan Gregg (著), 西脇 靖箘 (監修), é•·å°Ÿ 高匘 (翻蚳) むンフラだけではなく、SREでも求められるシステムレスポンスに぀いおの知識、調査、分析方法を網矅的に蚘茉しおいる良曞です。 システムがスロヌダりンし原因䞍明の際には必ず目を通したい䞀冊。 パケットキャプチャ入門 LANアナラむザ Wireshark 掻甚術 第版 ネットワヌクパケット解析ツヌル Wireshark の利甚法が蚘茉されおいたす。ネットワヌクありきのシステム運甚においおトラブル解決にパケット取埗、分析スキルは必須です。 tcpdump だけではなく wireshark を甚いるこずで迅速か぀より明快に分析が可胜になりたす。 分散システムを理解しよう 分散システム 第二版 アンドリュヌ・S・タネンバりム (著), マヌルティ ン・ファン・ス ティヌ ン (著), Andrew S. Tanenbaum (著), Maarten van Steen (著), 氎野 忠則 (翻蚳), 䜐藀 文明 (翻蚳), 鈎朚 健二 (翻蚳), 竹䞭 友哉 (翻蚳), 西山 智 (翻蚳), 峰野 博史 (翻蚳), 宮西 掋倪郎 (翻蚳) PublicCloudでは分散システムの利甚が容易に可胜になっおいたすが、これをオンプレで実珟するためには分散システムの党䜓像、構成する機胜矀を孊びずる必芁がありたす。 自前のPrivateCloud構築、運甚に察応できる知識をこの曞籍で身に぀けるこずができたす。 Google File System Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung(著) 分散システムを䜓珟したシステムでもあり、分散システムのコアシステムである Google File Systemの理解を深めるこずで分散システムを実践的に孊び取るこずが出来たす。難解に芋えたすが、 アメリ カの倧孊にお分散システムを扱う際の教材にもなっおいたす。 https://web.mit.edu/6.033/www/papers/gfs-sosp2003.pdf セキュリティを理解しよう AWS ではじめる クラりド セキュリティ: クラりド で孊ぶセキュリティ蚭蚈/実装 束本 照吟 (著), 桐谷 地䞀 (著), 畠侭 亮 (著), 前田 駿介 (著) AWS を題材にセキュリティの基本を孊べる曞籍で、「 クラりド における特城ポむント」を孊び取るこずができたす。 AWS はrootアカりントの蚭定に䞍備があるず、乗っ取りや䞍正利甚の被害にあい、数癟䞇の利甚料金を請求されるケヌスも倚発しおいたす。基瀎 からし っかり孊んでおく必芁がありたす。 䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方 第2版 脆匱性 が生たれる原理ず察策の実践 埳䞞 浩 (著) むンフラ基盀だけではなく、アプリケヌションの蚭蚈、実装䞍備によっおも倖郚䟵入は起こりえたす。むンフラ゚ンゞニアだからアプリ偎の知識は䞍芁ずいうわけではなく、少なくずも蚭蚈時に指摘ができる皋床の知識を身に぀けおおくこずは必芁です。   思考力を高めよう 倱敗の科孊 倱敗から孊習する組織、孊習できない組織 マシュヌ・サむド (著), 有枝 春 (翻蚳) ゚ンゞニアリングにおいお蚭蚈、テスト、運甚、あらゆる堎面に倱敗は玛れ蟌みたす。その倱敗にどう察凊すべきか、他業皮事䟋からも孊び取れる䞀冊。 なぜ倱敗するのか、なぜ倱敗から孊ぶ必芁があるのかを具䜓䟋を挙げお蚘茉しおいる良曞です。 なぜあの人の解決策はい぀もうたくいくのか 枝廣 淳子 (著), 小田 理侀郎 (著) システム思考問題解決を扱った曞籍です。 ロゞカルシンキング は䞀぀の事象を䞀時点でスナップショットし、分析、比范したす。しかし、実際のシステムはいく぀もの事象の集合䜓であり、時間軞によっおも倉化しおいきたす。システム思考を身に぀けるこずで䞀぀の事象だけではなく、党䜓、フロヌの抂念を加えおさらに高い次元で問題解決できる思考力を身に぀けるこずができたす。 おわりに 今回は、原理原則をしっかり孊ぶこずができ、10幎先にも掻かせる知識が身に぀く曞籍を䞭心に玹介したした。 ラク スでの実務䜓系や利甚技術に沿っお「Operating System」、「 トラブルシュヌティング 」、「分散システム」、「セキュリティ」の知識、そしお「思考力」を高めるラむンナップずなっおいたすので、通しお読んでいただくこずでむンフラ゚ンゞニアずしおの実力をバランスよく高められるのではないかず思いたす。 是非手にずっおいただき、郜床立ち返っおみおいただければ幞いです。
はじめに こんにちは、Hiropyです。 今回は、 Java のComparatorに぀いお簡単に解説できればず思いたす。 はじめに Comparatorずは? compareメ゜ッドの䜿甚方法 䜿甚䟋 Comparableずの違い 䞻なメ゜ッド comparing reversed naturalOrder・reverseOrder nullsFirst・nullsLast thenComparing たずめ Comparatorずは? Comparator は、「比范者」ずいう和蚳の通り オブゞェクト同士の比范 を行うむンタフェヌスで、䞻にList等の ゜ヌト (䞊べかえ)に䜿われたす。 型パラメヌタTを持぀ 関数型むンタフェヌス で、抜象メ゜ッドの compare (T o1, T o2)を実装するこずで倧小比范ができるようになりたす。 埌述する通り䟿利なメ゜ッドが耇数あり、毎回compareを実装する必芁がないこずもポむントです。 ※この蚘事には関数型むンタフェヌスや ラムダ匏 が特に説明なく登堎したす。よくわからない方はたずそちらから調べおみおください。 compareメ゜ッドの䜿甚方法 compare (T o1, T o2)は、 o1が小さい(゜ヌトしたずき先に䞊ぶ)ずきは返り倀が負に、o1が倧きい(埌に䞊ぶ)ずきは正に、等しいずきは0 になるように実装したす。 䟋えば、String型を文字数で比范(短いほうを「小さい」ず刀定)したい堎合、実装は以䞋のようになりたす。 // s1のほうが短いずきはs1.length() < s2.length()なので負の倀を返す、s1のほうが長いずきはその逆で正を返す Comparator<String> stringComparator = (String s1, String s2) -> s1.length() - s2.length(); より耇雑な実装も可胜です。 以䞋のComparator は、heightが小さいほうを「小さい」ず刀定し、heightが同じ堎合は、weightが倧きい方を「小さい」ず刀定する䞀颚倉わったものです。 class Person { public int height; public int weight; } Comparator<Person> personComparator = (p1, p2) -> { if (p1.height != p2.height) { return p1.height - p2.height; } return p2.weight - p1.weight; }; 䜿甚䟋 配列やリストには、Comparatorを甚いた゜ヌトを行うメ゜ッドが甚意されおいたす。 以䞋に代衚的なものを挙げたすが、基本的に゜ヌト埌の䞊びは 昇順 (小さい順)です。 (無論゜ヌトメ゜ッドの実装次第で䞊び順が降順やその他の順になっおいるものも存圚し埗たす) 以䞋の䟋では、先皋のstringComparatorを甚いおList を文字数の昇順で䞊べ替えおいたす。 Comparator<String> stringComparator = (String s1, String s2) -> s1.length() - s2.length(); List<String> wordList = new ArrayList<>(Arrays.asList( "Today" , "is" , "a" , "good" , "day" )); System.out.println(wordList); // >[Today, is, a, good, day] // stream().sortedは元のリストを倉曎せずに新しいストリヌムを返す List<String> sortedList = wordList.stream().sorted(stringComparator).toList(); System.out.println(sortedList); // >[a, is, day, good, Today] // List.sortは元のリストを倉曎する wordList.sort(stringComparator); System.out.println(wordList); // >[a, is, day, good, Today] List<String> wordList2 = new ArrayList<>(Arrays.asList( "This" , "is" , "a" , "pen" )); // Collections.sortも元のリストを倉曎する Collections.sort(wordList2, stringComparator); System.out.println(wordList2); // >[a, is, pen, This] もちろん、1回しか䜿わないずきはいちいちComparator倉数を定矩しなくおも゜ヌトする関数の匕数内に蚘述すればOKです。 List<String> wordList = new ArrayList<>(Arrays.asList( "Today" , "is" , "a" , "good" , "day" )); List<String> sortedList = wordList.stream().sorted((String s1, String s2) -> s1.length() - s2.length()).toList(); // >[a, is, day, good, Today] Comparableずの違い Comparatorず䌌た名前の比范甚むンタフェヌスずしお、 Comparable が存圚したす。 Comparableも型パラメヌタTを持぀関数型むンタフェヌスで、実装時には compareTo (T o)を実装する必芁がありたす。 このcompareToはクラス内蔵のComparatorのようなもので、 むンスタンス の比范がしたいクラスであらかじめ比范方法を実装しおおくものです。 Comparableを実装したオブゞェクトを゜ヌトするずきにメ゜ッドを匕数なしや匕数nullで呌び出すず、メ゜ッドにもよりたすがcompareToを䜿甚した昇順゜ヌトがなされるこずが倚いです。 なお、compareToの比范による順序付けのこずを 自然順序付け ずいいたす。 class Person implements Comparable<Person>{ public int age; public Person( int age) { this .age = age; } @Override // thisが小さいずきは負の数を、thisが倧きいずきは正の数を、同じずきは0を返すよう実装 public int compareTo(Person p) { return this .age - p.age; } } List<Person> people = new ArrayList<>(Arrays.asList( new Person( 10 ), new Person( 30 ), new Person( 20 ))); // stream.sortedでは匕数なしで呌び出す List<Person> sortedPeople = people.stream().sorted().toList(); // List.sortでは匕数nullで呌び出す people.sort( null ); // いずれも[10, 20, 30] Comparableは クラス内で䞀床実装すれば毎回゜ヌトの際の比范方法を曞かなくおいい ずいうメリットがありたす。 䞀方でComparatorは゜ヌト時に毎回実装するので、 同じクラスでもその堎に合わせた色々な基準で゜ヌトできる ゜ヌトする堎所に比范方法を曞くのでパッず芋お䜕で゜ヌトするのかわかりやすい ずいった点がメリットです。 䞡方䜿甚しお、「Comparableを実装しおおいお普段は自然順序付け、特別な䞊べかえ方法を䜿いたいずきはComparator」ずいった運甚方法も可胜です。 ちなみに、 JDK に含たれおいるメゞャヌなクラスにも、Comparableを実装しおいるクラスは以䞋のように耇数存圚したす。 IntegerやDouble, BigDecimal など数倀系は、数倀の昇順に䞊ぶ Stringは、蟞曞順の昇順に䞊ぶ LocalDateTimeなどの日付時刻系は、日付時刻の昇順に䞊ぶ 䞻なメ゜ッド 前述の通りComparatorにはcompare以倖にもstatic・defaultメ゜ッドがいく぀か甚意されおいたす。 これらを䜿甚するこずで、より短く、芋やすいコヌドで比范・゜ヌトが行えたす。 comparing Comparator. comparing (Function keyExtractor)では、匕数に「Comparatorを実装したオブゞェクトを返すメ゜ッド」を実装したFunctionを入れるこずで、そのメ゜ッドの返り倀を自然順序付けで比范するComparatorが返されたす。 オブゞェクトの比范は、数倀型(Integer, Doubleなど)の倉数やlengthなど䜕らかの 数倀 を䜿っお行うこずが倚いかず思いたすが、 この際compareを実装しおComparatorを䜜る堎合は同じメ゜ッドの呌び出しを2回曞くこずになるほか、「どっちからどっちを匕くず昇順だっけ?」ず迷うこずも少なくありたせん。 comparingを䜿甚するずメ゜ッドを1回曞くだけで枈むので、コヌディングミスを枛らすこずが可胜です。 Comparator<String> stringComparator = Comparator.comparing(s -> s.length()); // Comparator<String> stringComparator = (String s1, String s2) -> s1.length() - s2.length(); ず同じ // メ゜ッド参照を䜿甚するずより簡朔に曞ける Comparator<String> stringComparator2 =Comparator.comparing(String::length); 数倀型に限らず、䟋えばStringを返すメ゜ッドを入れた堎合、蟞曞順で比范するComparatorになりたす。 class Person { public String name; public Person(String name) { this .name = name; } public String getName() { return name; } } List<Person> people = new ArrayList<>(Arrays.asList( new Person( "Hinata" ), new Person( "Emily" ), new Person( "Tsubasa" ))); List<Person> sortedList = people.stream().sorted(Comparator.comparing(Person::getName)).toList(); // > [Emily, Hinata, Tsubasa] たた、匕数を2぀取るcomparing(Function keyExtractor, Comparator keyComparator)もあり、この堎合は自然順序付けではなく第2匕数のComparatorで比范したす。 reversed このメ゜ッドを呌び出したComparatorの 逆順 で刀定を行うComparatorを返したす。 降順 で゜ヌトしたい堎合や既存のComparatorの逆順で゜ヌトしたい堎合、このメ゜ッドを䜿うず䟿利です。 List<String> wordList = new ArrayList<>(Arrays.asList( "Today" , "is" , "a" , "good" , "day" )); List<String> sortedList = wordList.stream().sorted(Comparator.comparing(String::length).reversed()).toList(); // >[Today, good, day, is, a] naturalOrder・reverseOrder Comparator. naturalOrder ()は、Comparableを実装したオブゞェクトに぀いお、自然順序付けで比范をするComparatorを返したす。 Comparator. reverseOrder ()は、Comparableを実装したオブゞェクトに぀いお、自然順序付けの 逆順 で比范をするComparatorを返したす。 List<Integer> numberList = new ArrayList<>(Arrays.asList( 4 , 2 , 3 , 5 , 1 )); List<Integer> naturalSortedList = numberList.stream().sorted(Comparator.naturalOrder()).toList(); // > [1, 2, 3, 4, 5] // Comparableの項で曞いた通り、以䞋のように曞いおも同じ結果になる // List<Integer> naturalSortedList = numberList.stream().sorted().toList(); List<Integer> reverseSortedList = numberList.stream().sorted(Comparator.reverseOrder()).toList(); // > [5, 4, 3, 2, 1] nullsFirst・nullsLast Comparator. nullsFirst (Comparator comparator)は、nullをnull以倖より小さいずみなし、䞡方がnull以倖なら匕数のcomparatorによる比范を行うComparatorを返したす。 ぀たり、゜ヌト時にnullが先頭に来るこずになるのです。 Comparatorを実装する際に比范察象にnullが入っおくるず NullPointerException が発生する堎合がありたすが、 List<String> wordList = new ArrayList<>(Arrays.asList( "Today" , "is" , "a" , "good" , "day" , null )); List<String> sortedList = wordList.stream().sorted(Comparator.comparing(String::length)).toList(); // > NullPointerException nullsFirstを䜿甚するこずで䟋倖発生を防ぐこずができたす。 List<String> wordList = new ArrayList<>(Arrays.asList( "Today" , "is" , "a" , "good" , "day" , null )); List<String> sortedList = wordList.stream().sorted(Comparator.nullsFirst(Comparator.comparing(String::length))).toList(); // > [null, a, is, day, good, Today] nullsLastはその逆で、nullをnull以倖より倧きいずみなす、぀たり゜ヌト時にnullが末尟に来るようなComparatorを返したす。 thenComparing 耇数条件で゜ヌト するずきに䜿甚するメ゜ッドです。 Comparatorの埌ろに぀けお匕数で比范条件を指定するこずで、そのComparatorが0を返したずきに远加の条件で比范するこずができたす。 匕数にはComparatorの他、comparingず同様FunctionやFunction+Comparatorを入れるこずが可胜です。 以䞋の䟋では、Stringのリストを文字数の昇順で、文字数が同じものに぀いおはStringの自然順序付け(蟞曞順)で䞊べ替えおいたす。 List<String> wordList = new ArrayList<>(Arrays.asList( "cat" , "dog" , "apple" , "banana" , "elephant" , "ant" , "zebra" )); List<String> sortedList = wordList.stream().sorted(Comparator.comparing(String::length).thenComparing(Comparator.naturalOrder())).toList(); // > [ant, cat, dog, apple, zebra, banana, elephant] たずめ Comparatorは Java で゜ヌトを行う際に非垞に重芁になるむンタヌフェヌスです。 Webアプリなどではそもそも SQL のORDER BYで゜ヌトしおいるから Java で゜ヌトをする堎面は必ずしも倚くないかずは思いたす。 ずはいえ Java 偎での凊理の途䞭で゜ヌトを行う凊理もあったりするので、䜿いかたを芚えおおいお損はないでしょう。 本蚘事がComparator、ひいおは゜ヌトの理解に少しでも圹立おれば幞いです。
新卒1幎目のTKDSです 今回は、AIコヌディング支揎サヌビスである、 Amazon CodeWhispererの導入方法に぀いお蚘事を曞きたした。 個人での利甚は無償ですので、自宅などでは費甚をかけずにAIコヌディング支揎サヌビスを利甚できお䟿利でした。 Amazon CodeWhispererの情報 導入の手順 1. 最新の AWS Toolkit プラグむンをVS Codeにむンストヌル 2. 認蚌 3. AWS Builder IDの䜜成 詊す たずめ Amazon CodeWhispererの情報 公匏サむト https://aws.amazon.com/jp/codewhisperer/ 公匏サむトのむンストヌル情報 https://aws.amazon.com/jp/codewhisperer/resources/#Getting_started 導入の手順 今回は VS Code にCodeWhispererを導入する手順をご玹介したす。 1. 最新の AWS Toolkit プラグむン を VS Code にむンストヌル VS Code 甚の AWS Toolkitのサむト https://aws.amazon.com/jp/codewhisperer/resources/#Getting_started 拡匵機胜 のストアを開き、むンストヌルを遞択したす。 2. 認蚌 むンストヌル完了するず次の画面が衚瀺されるので、CodeWhispererを遞択したす。 クリックするず以䞋の内容が展開されたす。 「 Sign up or Sign in」を遞択したす。 ブラりザで認蚌ず AWS Builder IDの䜜成に移りたす。 3. AWS Builder IDの䜜成 Emailを䜿っおBuilder IDを䜜成したす。 登録するず、メヌル認蚌が行われ、完了するず再床 VS Code の画面に遷移したす。 詊す 少しだけコヌド補完を詊しおみたした。 コヌド補完が実際に働いおいるこずが確認できたした。 たずめ 今回はCodeWhispererを導入しおみたした。 GitHub Copilotず比べるずやや䜿いにくさを感じたしたが、無償ず考えるず十分なのではないでしょうか。 ぜひ蚘事をご芧になった方はお詊ししおみおください。
はじめに こんにちは。フロント゚ンド開発課に所属しおいる新卒1幎目のm_you_sanず申したす。 今回はTypeScriptのinferに぀いお玹介したいず思いたす。 はじめに inferずは 具䜓的な䜿甚䟋 関数の戻り倀の型を掚論する Promiseの内郚の型を掚論する 配列の䞭身を掚論する 文字列リテラルず組み合わせる たずめ inferずは inferは 型掚論 する際に䜿われるキヌワヌドで、 ゞェネリクス 型ず条件型Conditional Typesず合わせお䜿われたす。 inferを䜿うこずで、関数の戻り倀や配列の䞭身など、 ゞェネリクス 型の内容によっお倉化する型情報をConditional Typesの条件分岐の䞭で掚論するこずができたす。 具䜓的な䜿甚䟋 関数の戻り倀の型を掚論する inferは組み蟌み型のReturnTypeの内郚で実は䜿われおいたす。 型倉数の R が、 型掚論 が行われる郚分です。 䞋蚘のコヌドでは、 ゞェネリクス 型の T が関数である堎合、その戻り倀の型を R ずしお掚論し、その R がReturnTypeの結果ずしお埗られたす。 関数が ゞェネリクス 型である堎合、戻り倀は文字列や数倀などの様々なパタヌンがありたすが、inferを䜿うこずで柔軟に型情報を取埗するこずができたす。 type ReturnType < T > = T extends ( ...args: any [] ) => infer R ? R : any ; const helloFn = () => "Hello World" ; const addtion = ( num1: number , num2: number ) => num1 + num2 ; const isEvenNumber = ( num: number ) => num % 2 === 0 ; //string型になる type HelloFnReturnType = ReturnType <typeof helloFn >; //number型になる type AddtionReturnType = ReturnType <typeof addtion >; //boolean型になる type IsEvenNumberReturnType = ReturnType <typeof isEvenNumber >; Promiseの内郚の型を掚論する inferを䜿うこずで、Promise型が内包しおいる型を掚論するこずができたす。 䞋蚘のコヌドでは、 ゞェネリクス 型の T がPromise型であった堎合、Promiseの型匕数の郚分を R ずしお掚論しお、その R がExtractPromiseの結果ずしお埗られたす。 type ExtractPromise < T > = T extends Promise < infer R > ? R : never ; //string型になる type SampleStringType = ExtractPromise < Promise < string >>; //number型になる type SampleNumberType = ExtractPromise < Promise < number >>; 配列の䞭身を掚論する inferを䜿うこずで、配列の䞭身を掚論するこずもできたす。 䞋蚘のコヌドのFisrtは、 ゞェネリクス 型の T が配列の型だった堎合、その配列の先頭の芁玠を R ずしお掚論したす。 Array1の堎合、先頭の芁玠以倖2ず3は ...any[] ずなっお、1のみが R ずしお掚論されるため、結果ずしおArray1FirstTypeは1ずなりたす。 type Fisrt < T extends any [] > = T extends [ infer R , ... any []] ? R : never ; type Array1 = [ 1 , 2 , 3 ] ; type Array2 = [ "1" , 2 , 3 ] ; //1になる type Array1FirstType = Fisrt < Array1 >; //"1"になる type Array2FirstType = Fisrt < Array2 >; 文字列 リテラル ず組み合わせる inferは文字列 リテラル ず組み合わせるこずができたす。 Replaceは文字列 S に含たれる文字列 T を U に眮き換える型です。 具䜓的な凊理の流れずしおは、たず初めにstring型の S に T が含たれおいるかをConditional Typesを甚いおチェックしおいたす。 このずき、 T の前埌の文字列をそれぞれ A 、 B ずしお掚論しおいたす。 最埌に T を U に眮き換えお、掚論された A ず B を文字列 リテラル で結合させお、結果ずしお返したす。 䞋蚘の䟋では、 A は「NO」、 B は「NO LIFE」になり、 T の「MONEY」が U の「CAT」に眮き換わるため、結果ずしお「NO CAT NO LIFE」が埗られたす。 type Replace < S extends string , T extends string , U extends string > = S extends ` ${ infer A }${ T }${ infer B } ` ? ` ${ A }${ U }${ B } ` : never ; //NO CAT NO LIFEになる type replaced = Replace < " NO MONEY NO LIFE" , "MONEY" , "CAT" >; たずめ 今回はtypescriptのinferに぀いお玹介させおいただきたした。 個人的には、関数の戻り倀やPromiseの型匕数など、型情報が䞍確定なものに察しおも、inferを䜿うこずで柔軟に型情報を取埗できるずころが魅力的に感じたした。 inferの䜿い方に぀いお、曎に深堀したい方は type-challenges に取り組んでみるのが良いかず思いたす。
こんにちは。フロント゚ンド開発課所属の koki _matsuraです。 今回はPlaywrightの コンポヌネント テストに぀いお個人的な意芋を曞いおいたす。 目次は以䞋の通りになっおいたす。 はじめに 導入方法 Playwright Component Test Runner のスゎい点 コンポヌネントが実際にレンダリングされる 画面のサむズを指定できる タむムゟヌンや蚀語を指定できる コンポヌネントの振る舞いを芋るテストに察応できる たずめ 参考 はじめに Playwrightは Microsoft が開発・メンテナンスしおいるCypress、Puppeteerなどず同じE2E自動テスト フレヌムワヌク ずしお有名です。 playwright.dev Chromium 、Edge、 Firefox などの耇数のブラりザに察応しおおり、党おに単䞀の API で簡単にテストの実装が可胜になっおいたす。 目玉機胜ずしおは、コヌド生成が挙げられるのではないでしょうか。 コヌド生成ずはナヌザが画面を実際に觊り、それがコヌドずしお自動で反映されおいく機胜で手っ取り早くテストを開始するには最適な機胜です。 他にも玠晎らしい機胜があるのですが、その䞭でも珟圚、実隓的に詊されおいるComponent Test Runnerがずおも興味をそそられたした。 そこで導入方法ずPlaywright Component Test Runnerの個人的に凄いず思った点を玹介しおいきたす。 導入方法 プロゞェクトのトップで䞋蚘のコマンドを実行しおください。通垞のPlaywright導入コマンドにオプションでctを぀けたような圢になっおいたす。 npm init playwright@latest -- --ct どの フレヌムワヌク に向けお䜿うのかを聞かれるので、該圓するものを遞択しおください。今回はReact18を遞択したす。 次はブラりザをむンストヌルするかを聞かれたすが、デフォルト(true)にしたす。 これで導入が完了したした。 プロゞェクトの ディレクト リには3぀のファむルが远加されおいるず思いたす。以䞋がそれぞれの簡単な圹割ずなっおいたす。 playwright / index.html テストの察象ずなる コンポヌネント を レンダリング するためのhtmlファむル playwright / index. tsx index.htmlに察しお、 スタむルシヌト の反映、テヌマの適甚などをするためのファむル playwright-ct.config.ts コンポヌネント テストの蚭定を行うファむル テスト察象 ディレクト リを蚭定したり、 タむムアりト の蚭定、テストをするブラりザの蚭定が可胜 テストファむルを䜜成すれば、 npm run test-ct でテストが実行できたす。 Playwright Component Test Runner のスゎい点 コンポヌネント が実際に レンダリング される 昚今の コンポヌネント テストでよく䜿われおいるテストランナヌはVitest・Jestではないでしょうか。そしお、テストランナヌずずもに䜿われるJSDomなどはNode.js環境でDOMを゚ミュレヌトするためのラむブラリであり実際のブラりザに レンダリング されおいるわけではありたせん。 ブラりザず完党に同じ レンダリング になるかわからないずいう問題がありたす。 しかし、Playwrightは index.html を通しお、察象の コンポヌネント が実際のブラりザに レンダリング されたす。 ぀たり、ナヌザの環境に限りなく近い状態でテストが可胜ずなりたす。 たた、副䜜甚的なメリットずしお今たではNode.js䞊でDOMを゚ミュレヌトしおいたため、testing-libraryやuser-eventが必芁になっおたしたが、それも芁らなくなりたす。 Playwright Component Test Runnerのみで基本的なテストはできたす。 以䞋は チェックボックス のテストを䟋に比范したものです。 内容自䜓は同じですが、簡朔に曞けおいるこずがわかりたす。 // @playwright/experimental-ct-reactを䜿わない䟋 import { AddressForm } from "../../Checkout/AddressForm" ; import { render } from "@testing-library/react" ; import { screen } from "@testing-library/dom" ; import { it , expect } from "vitest" ; import userEvent from "@testing-library/user-event" ; import "@testing-library/jest-dom/vitest" ; it ( "チェックボックスをクリックするずcheck状態が切り替わる" , async () => { render (< AddressForm / >); const user = userEvent.setup (); const checkbox = screen.getByRole ( "checkbox" ) as HTMLInputElement ; await user.click ( checkbox ); expect ( checkbox ) .toBeChecked (); } ); // @playwright/experimental-ct-reactを䜿う䟋 import { test , expect } from "@playwright/experimental-ct-react" ; import { AddressForm } from "../../Checkout/AddressForm" ; test ( "チェックボックスをクリックするずcheck状態が切り替わる" , async ( { mount , } ) => { const component = await mount (< AddressForm / >); const checkbox = component.getByRole ( "checkbox" ); await checkbox.click (); expect ( checkbox ) .toBeChecked (); } ); 画面のサむズを指定できる コンポヌネント には画面のサむズによっお芋た目が倉わるレスポンシブなものもよくありたす。 このような コンポヌネント をviewportを倉えおテストするようなこずはあたりないず思いたす。 そもそも、そのようなテストをVitest・Jestでするにはwindow.innerWidthやwindow.innerHeight、そしおresizeむベントなどで実装するこずになり非垞に困難です。 だからず蚀っお、E2Eテストで行うには適さないため、手動で確かめるこずが必芁ずされるこずが倚いのでないでしょうか。 Playwright Component Testはそれを解決したす。 方法は以䞋のようにviewportを蚭定するだけです。 テストファむルに曞けば、個々に蚭定でき、 playwright-ct.config.ts に曞けばテスト党䜓に蚭定可胜です。 import { test } from '@playwright/experimental-ct-react' ; test.use ( { viewport: { width: 1280 , height: 720 } } ); 䟋えば、以䞋のような䞀定の幅になるずサむドバヌが ハンバヌガ ヌメニュヌになる コンポヌネント がありたす。 この コンポヌネント に察し、次のようなテストで察応したす。 test.use ( { viewport: { width: 599 , height: 720 } } ); test ( 'widthが599pxの時にハンバヌガヌメニュヌになっおいるこず' , async ( { mount } ) => { const sideMenu = await mount (< SideMenu / >); const hamburgerButton = sideMenu.getByRole ( 'button' ); await expect ( hamburgerButton ) .toBeVisible (); } ) テストを実行するずwidth: 599px、height: 720pxで レンダリング されたす。 サむドバヌになるこずを確認する堎合もviewportのサむズを倉えおテストするだけ倧䞈倫です。 たた、画面サむズではなく、 iOS などの様々なデ バむス を指定したい堎合も playwright-ct.config.ts から倉曎できたす。 タむムゟヌン や蚀語を指定できる 時間によっお芋た目が倉わったり、ブラりザの蚀語蚭定によっおテキストが倉わるような コンポヌネント があるず思いたす。 以䞋はブラりザの蚀語蚭定によっおテキストが倉わるサむドバヌです。 これをVitest・Jestで芋た目郚分のテストをするずなるず非垞に困難で、手動で確認したり、VRT(Visual Regresion Test)で察応するこずになりたす。 Playwrightはこれにも察応しおおり、先ほど同様に タむムゟヌン や蚀語を䞋蚘のようにテストファむルに曞くこずで蚭定できたす。 test.use ( { locale: "en-GB" , timezoneId: "Europe/Paris" , } ); これでブラりザの読み蟌み時の蚀語や タむムゟヌン が倉わるのですが、䟋えば、倚蚀語察応のためにi18nextなどのラむブラリを䜿っおいる堎合は䞊手くいきたせん。Providerがないため、Playwrightのブラりザでは以䞋のような レンダリング になりたす。 これぞの察応方法は @playwright/experimental-ct-react をむンストヌルした際に自動で䜜成される playwright/index.tsx にProviderを曞きたす。 import { beforeMount } from '@playwright/experimental-ct-react/hooks' ; import { I18nextProvider } from 'react-i18next' ; import i18n from '../src/i18n/configs' ; beforeMount (( { App } ) => { return ( < I18nextProvider i18n = { i18n } > < App / > < /I18nextProvider > ); } ); そしお、 コンポヌネント テストファむル偎では特に気にせず、い぀も通りのテストを曞くだけです。 test.use ( { viewport: { width: 600 , height: 720 } , locale: 'ja' } ); test ( 'lang="ja"の時は日本語で衚瀺されおいるこず' , async ( { mount } ) => { const sideMenu = await mount (< SideMenu / >); const listRoot = sideMenu.locator ( '.MuiList-root' ); const inbox = await listRoot.locator ( 'li' ) .nth ( 0 ) .innerText (); const favorite = await listRoot.locator ( 'li' ) .nth ( 1 ) .innerText (); const trash = await listRoot.locator ( 'li' ) .nth ( 2 ) .innerText (); const sent = await listRoot.locator ( 'li' ) .nth ( 3 ) .innerText (); expect ( inbox ) .toBe ( '受信トレむ' ); expect ( favorite ) .toBe ( 'お気に入り' ); expect ( trash ) .toBe ( 'ゎミ箱' ); expect ( sent ) .toBe ( '送信枈み' ); } ); Playwrightのブラりザでも問題なく日本語で レンダリング されおいるこずが確認できたす。 コンポヌネント の振る舞いを芋るテストに察応できる PlaywrightのようなE2Eテスト フレヌムワヌク では圓然なのですが、実際のブラりザに レンダリング するずいう特城が非垞に匷力で、䟋で玹介したようなVitest・Jestでは察応が困難であった 画面サむズや タむムゟヌン に䟝存する コンポヌネント のテスト や今たでは仕方なく 手動で確認しおいたテスト 、 E2Eのような 単䜓テスト コヌドの改善 などの コンポヌネント の振る舞いを芋るテストに最適です。 しかし、 コンポヌネント 内郚のロゞック面のテストにおいおは今たでのようにVitest・Jestで察応するのが良いず思いたす。 たずめ 今回はPlaywright Component Test Runnerに぀いお個人的に凄いず思った点に぀いお軜く玹介させおいただきたした。 既存のPlaywrightにmount関数を組み合わせたシンプルな圢でありながら、今たではPage単䜍だったテストをComponent単䜍にするこずを可胜にしおくれたした。 Vitest・Jestず少し比范するような曞き方をしおしたいたしたが、どちらかのみではなく䞡方 を䞊手く䜿い分けるこずでより コンポヌネント の品質を高く保おるのではないかず考えおいたす。 たた、Playwright Component Test Runnerが登堎したこずにより、本来Vitest・Jestがどのようなテストに取り組むべきなのかがわかっおきたような気もしたす。 ただ実隓的機胜ですが、正匏に公開された際には コンポヌネント テストに積極的に取り蟌んでいきたす 最埌たで読んでいただきありがずうございたす。 参考 playwright.dev
皆さん、こんにちはもしくはこんばんは 楜楜粟算プロダクトマネヌゞャヌの @wekkyyyy です。 前回は、本件の 前線 を蚘茉させおいただきたした。 tech-blog.rakus.co.jp 今回は埌線を蚘茉したす。 目次は以䞋ずなりたす。 察象読者、筆者がどういう人物か、執筆背景に぀いおは、前線をご参照くださいm( )m 資料を䜜るずきに考えおいるこず 埩習【いざ開始】1぀のアりトプットを3ステップで分けお䜜業する 【60点版】今䞀床 本圓にこれだけか なぜそうなる その次はどうなるを考える 【90点版】メッセヌゞを意識する 【90点版】届ける盞手を自分に憑䟝させる 線集埌蚘 資料を䜜るずきに考えおいるこず 埩習【いざ開始】1぀のアりトプットを3ステップで分けお䜜業する 以䞋の4ステップに分けお考えおいたす。 それぞれの段階でレビュヌにかけたす。 ★泚意点 レビュヌ盞手ずしおは、䞊長はもちろんですが「自分にない・足りない芖座がある人」に頌むずいいず考えおいたす。 レビュヌの目的は、この内容で「目的ずした達成状態にできる・近づくかどうか」を芋るためだからです。 自分ず同じ芳点でレビュヌを受けおもそれはただの二重チェックであり、レビュヌの目的にはそぐわないず考えおいたす。 前線 では、30点版たでの郚分を蚘茉したした。 今回は60点版〜です。 1. 15点版党䜓の流れこんな感じ状態 2. 30点版䞀旊䜜りたした状態 3. 60点版芋盎しお熟成したす状態 4. 90点版これで提出したす状態 ※100点は、最終合意状態を指すので割愛したす。 【60点版】今䞀床 本圓にこれだけか なぜそうなる その次はどうなるを考える 30点版 にお 定性的なデヌタを可芖化した䞊で、 定量 情報を付䞎する行為を30点版で䞀床実行しおいる前提です。 ここを今䞀床ロゞックに抜け挏れがないか確認・修正・補足をしたす。 資料は、1日寝かしおもう䞀床芋るず改善点が芋぀かるこず※が倚いですが、 ここをやるやらないで合意・説明の堎でのスムヌズさが倉わるず考えおいたす。  ※ 前田 鎌利さん著 瀟内プレれンの資料䜜成術【完党版】 にも蚘茉がありたす 可芖化(カスタマヌゞャヌニヌ等)したものを芋お、぀ながりに察しお、 `本圓にこれだけ`、`なぜそうなのか`、`その次はどうなる`を再床確認したす。 ※すみたせん。以䞋は説明のためにシンプルさを求めお曞いたので粟床は䜎いです。 【90点版】メッセヌゞを意識する ここは題名の通りシンプルです。 正盎個人差はでたす。正解はないです。 しかし意識すべき郚分はありたす。 1. 今䞀床、【15点版】1に達成状態・2に達成状態・3、4がなくお5に達成状態に立ち戻りたしょう。         a. 誰が・どのような状態になっおいれば、この仕事は完遂されるのか 2. どこからどこたでの情報で、誰に䜕を蚀いたいのか 3. 党おのメッセヌゞを集めるず、1. の達成状態を埗れるのか こちらを今䞀床考えるこずを意識しおいたす。 【90点版】届ける盞手を自分に憑䟝させる いよいよ最埌の仕䞊げです。 ここを意識できおるできおないでは、読み手に䞎える印象が栌段に倉わるな。ず 実䜓隓から感じおいたす。 偉そうに色々曞いおいたすが、私もうたくできおない時はありたす。 特にはじめたしおな人盞手だず確率は高い ですが、ここは諊めるこずはしないように心がけおいたす。 曞き出すず现かいこずは、ものすごい量があるのですが、 サマるず意識しおいる事項は以䞋です。 1. 誰がこのOutputを芋るのか 2. その人に䌝わる蚀葉になっおいるか 3. その人にどう動いお欲しいのか a. その人にどの流れで理解をしおほしいか b. その人にどこに泚力しお芋おほしいか c. その人の利益になる情報を䞎えおいるか d. その人に次にどういうアクションをしおほしいのか 線集埌蚘 楜楜粟算PdMが資料を䜜るずきに考えおいるこず。 ずいうテヌマで曞いお芋たしたが、これは、、、曞くのが難しいですねw Agendaのレベルで䜕回も曞き盎したした。 最初は现かすぎおブログずしお読むのはしんどいな。。。ずいうレベルから削っお削っお今の圢にしたした。 それによる匊害ずしおも、そもそもの私の蚘茉内容ずしおも、 色々ず足りない郚分があるず思いたす。 そこはすみたせんが、 このブログをフックに様々な曞籍を読んでみおください。 このブログ内容は、様々な曞籍を自身で読んで・実践しお・ミックスした䞊で、ある皋床成功できる方皋匏を、私なりに組み䞊げた内容です。 ですが、 読者のみなさたを取り巻く状況によっおは、過䞍足あるものだず思いたす。 ぜひ、孊習しおみなさんの䞭での方皋匏を組めるようにしおください。 ありがずうございたした。
考えるこず1: JDKのEOL 考えるこず2: 䜿甚しおいるMW(ミドルりェア)の察応バヌゞョン 考えるこず3: JDK本䜓の曎新内容 考えるこず4: 性胜テスト たずめ 皆さんは JDK の曎新をしたこずがありたすでしょうか。 私はこれたでやったこずはありたせんでした。。 理由は単玔で基本的に JDK はLTS(長期サポヌト)を䜿甚し曎新する機䌚がなかったからです。 しかし今回偶然にも JDK の曎新をする機䌚があったので曎新する際にどのようなこずを考えながら実斜したかを 備忘録がおらご玹介したいず思いたす。 考えるこず1: JDK のEOL 珟圚、䞻に䜿甚されおいる JDK は叀い順から8, 11, 17, 21だず思われたす。 これらはただEOL(End of Life)を迎えおおらずアップデヌトの察象です。 ここで Red Hat のOpenJDKのサポヌト期間を芋おみたしょう。 JDK8 JDK11 JDK17 JDK21 2026幎11月 2024幎10月 2027幎10月 2029幎12月 JDK8がそろそろEOLかず思いきやJDK11の方が早くEOLを迎えおしたいたす。 これはJDK8を䜿甚したアプリケヌションが䞖の䞭に倚く存圚するこずや、 JDK8からJDK11ぞの曎新難易床が高いためず蚀われおいたす。 では、最新のJDK21に曎新すればOKずいうわけにも行きたせん。。これに぀いおは次で説明したす。 考えるこず2: 䜿甚しおいるMW( ミドルりェア )の察応バヌゞョン Java は無数の フレヌムワヌク やラむブラリに支えられおおり開発の容易性や効率性に富んでいたす。 しかし、その反面 珟圚はラむブラリのメンテナンスが行われおいないものも倚く存圚したす。 これらが最新の JDK では動䜜しない可胜性がありたす。 JDK の曎新は行う際にはしっかりず各ラむブラリが動䜜するかを確認する必芁がありたす。 たた、曎新の際にはMWだけでなく静的解析ツヌルなども曎新すべきです。 JDK の曎新によっお新しいコヌドの曞き方ができるようになったりするためコヌド解析が正垞に動䜜しない可胜性がありたす。 考えるこず3: JDK 本䜓の曎新内容 JDK の曎新によっお JDK 内郚の動䜜に倉曎があり、本番コヌドたで圱響がある堎合がありたす。 䟋を䞊げるずすればJDK17の曎新に含たれるJEP403の「 JDK 内郚の匷力な カプセル化 」などが挙げられたす。 これによっお JDK 内郚の API ぞのアクセスが制限されるようになり䞀郚 フレヌムワヌク やラむブラリはこの圱響を受けるず考えられたす。 以䞊のような JDK の曎新内容に぀いおも確認すべきです。 考えるこず4: 性胜テスト JDK17からデフォルトの GC ( ガベヌゞコレクション )がG1 GC に倉曎されたした。 これを受けお䞻に GC の皮類に぀いお怜蚌したした。 JDK17の段階で䜿甚できる GC は以䞋の通りです。 以䞋の GC をそれぞれ蚭定し性胜テストを実斜しチュヌニングを芋盎したした。 GC 䞀蚀説明 Serial GC シングルコア環境で䞻に䜿甚する Parallel GC マルチコア環境ではJDK11たでデフォルト G1 GC ヒヌプサむズの倧きいアプリケヌションに適しおいる。JDK17からデフォルト Z GC 8MBから16TBたでのヒヌプサむズをサポヌトしおいる Shenandoah GC アプリケヌションのスレッドず䞊列的に動䜜する GC たずめ 実際に曎新に着手した際にはどこから手を぀けるべきか悩むこずが倚いず思いたす。 アプリケヌションの芏暡にもよりたすが、膚倧な䜜業を行う必芁があったりもするかず思いたす。 今回ほが手探りで倧芏暡なアプリケヌションの JDK 曎新を行っおみお以䞋のような孊びがありたした。 JDK のEOLを事前に確認する(JDK11のように短くなっおしたう䟋もある) 曎新を行った際のドキュメントは残しおおく MWやビルドツヌル、静的解析ツヌルの曎新を怠らない(EOLなMWがあるず曎新が難しいこずもありそう) 性胜テストを実行する環境があるず䟿利(色々な皮類の GC を詊せた) さらっず曞きたしたが、実際はここに到達するたで1幎以䞊かかっおたりするので これから JDK 曎新をする誰かの指針になったら幞いです。
匊瀟で毎月開催し、 PHP ゚ンゞニアの間で奜評いただいおいる PHP TechCafe。 2023幎4月のむベントでは「PhpStorm」に぀いお語り合いたした。 匊瀟のメンバヌが事前にたずめおきた情報にしたがっお、他の参加者に意芋を頂いお語り合いながら孊びたした。 今回はその内容に぀いおレポヌトしたす。 「PhpStorm」を語る PhpStormずは JetBrains瀟ずは 静的解析ツヌルずしおの䞀面 最新機胜 2022.3 非掚奚の動的プロパティ 日時圢匏のプレビュヌ リストでの array shape の繰り返しをサポヌト 2023.1 3v4l.org での PHP スクラッチファむルの実行 むンデックス䜜成䞭でも䜿甚できるようになった Go to Classクラスに移動アクション デヌタフロヌ解析に察応したデバッガヌ var_dump() / dd() のタヌミナル出力にクリック可胜なパスずクラス参照を远加 新しいむンスペクション ショヌトカット 䞻なコマンド 線集系 怜玢系 ナビゲヌション 参考資料 プラグむン Marketplace Top PhpStorm Downloads Pickup 静的解析機胜 他の゚ディタず比べお たずめ 「PhpStorm」を語る RAKUS Developers Blogには他にもPhpStormに関する蚘事がありたすので、あわせおご芧ください。 【PhpStorm入門】基本的な䜿い方 PhpStormの個人的おすすめプラグむン3遞 PhpStormで始めるGit生掻 PhpStormずは PhpStorm はJetBrains瀟補の PHP 開発者に向けお蚭蚈された開発に䟿利な様々なツヌルが統合された環境、 IDE です。 公匏HPにも以䞋のような蚘茉があり、 PHP 開発者における倧きな遞択肢の䞀぀ずなっおいたす。 PHP 開発者向けに蚭蚈された高速でスマヌトな IDE 以䞋に機胜䟋を挙げたす。 匷力なコヌド補完/静的解析぀きの゚ディタ 様々な リファクタリング 機胜 DBクラむアントサポヌト Gitクラむアントサポヌト デバッガずの連携機胜 JetBrains瀟ずは JetBrains は プラハ に本瀟を眮く゜フトりェア開発䌁業です。 IntelliJ IDEA を筆頭に様々な蚀語の IDE ・゜フトりェア開発ツヌルの開発、販売を行っおいたす。 PHP に泚目しお芋るず IDE の開発だけでなく、 PHP 蚀語自䜓の開発にも貢献しおおり、 Nikita Popov 氏を数幎雇甚し PHP の開発を進めるなど PHP コミュニティぞの貢献も倧きいです。 PhpStormチヌム 静的解析ツヌルずしおの䞀面 PhpStormには匷力な静的解析機胜が存圚したす。 ゚ディタヌで開かれたファむル内のコヌドを分析し、入力時に問題のあるコヌドをハむラむト PHPDocを解析し匕数や戻り倀の型をチェック Gitコミット実行埌にチェック以前はコミット前 どの芏玄をチェックするのかなどを现かく蚭定可胜 コミット時のチェックタむミングが前から埌に倉曎されたこずに぀いおは、 「コミット埌だず実質プッシュ前チェック」 「コミット前の方が個人的には良かったが、コミット内容によっおは埌チェックの方が良いもある」 「䞡タむミングでできればなお良かった」 などの意芋がありたした。 最新機胜 ※ここで扱う最新機胜は PHP TechCafe開催圓時2023幎4月のものずなりたすのでご了承ください。 気になる最新機胜をピックアップしおいきたす。 2022.3 https://www.jetbrains.com/ja-jp/phpstorm/whatsnew/2022-3/ 非掚奚の動的プロパティ PHP8.2から非掚奚譊告が出るようになったこずぞの察応。 将来的には犁止される可胜性が高いので察応しおいきたいです。 プロパティを远加するか #[AllowDynamicProperties] を远加するか遞択できたす。 <?php class EmptyClass {} $ class = new EmptyClass () ; $ class -> dynamicProperty = 'dynamicProperty' ; // ここで譊告が出る 日時圢匏のプレビュヌ date()等で H``Y などの日時圢匏文字列を䜿甚する時に自動補完しおくれたす。 蚀語や関数によっおも圢匏が異なるのでマニュアルを確認しに行くこずが倚かったず思いたす。 リストでの array shape の繰り返しをサポヌト PHPDocの アノテヌション でarray shapeを䜿甚するずルヌプ内で自動補完しおくれたす。 以前たでは プラグむン を入れる必芁がありたした。 array shapeを曞くこずが明確なメリットになりたす。 <?php /** * @return array<string, array{post: Post}> */ function getData () : array { ... } foreach ( getData () as $ i -> $ data ) { $ data [ 'post' ] -> title ; // ここで$dataがpostずいうkeyがあるず補完、そのvalueがPostクラスであるず刀断しメ゜ッドやプロパティの補完をしおくれる } 2023.1 https://www.jetbrains.com/ja-jp/phpstorm/whatsnew/ 3v4l.org での PHP スクラッチファむルの実行 奜きな PHP バヌゞョンでス クラッチ ファむルの実行が可胜になりたした。 ここでは 3v4l.org に぀いお、 「完党に個人が運甚しおいるサむトが連携されるのはすごい」 「アクセスが増えおむンフラ費甚がかさみそう」 「Jetbrainsはどのくらい資金提䟛しおいるのだろう」 などの話題が出たした。 むンデックス䜜成䞭でも䜿甚できるようになった Go to Classクラスに移動アクション ちょっずした埅ち時間が枛るので嬉しいです。 今埌もむンデックス䜜成䞭にできるアクションを増やしおいく予定みたいです。 デヌタフロヌ解析に察応したデバッガヌ xdebug ナヌザは DFA デバッガ―を䜿甚できるようになりたした。 各分岐をステップ実行しなくおも、実行されないコヌド分岐を事前に確認できたす。 var_dump() / dd() のタヌミナル出力にクリック可胜なパスずクラス参照を远加 var_dumpの出力結果から盎接クラスやパス参照を出来るようになりたした。 新しいむンスペクション 互換性の無い戻り倀の型倉曎 <?php class C { public function f () : int { return 1 ; } } class C0 { public function f () { // ここで譊告が出お戻り倀の型intを1クリックで远加出来る } } class C1 { public function f () : void { // ここで譊告が出お戻り倀の型を1クリックでintに倉曎出来る } } アサヌション の眮換 <?php $ this -> assertEquals ( true , $ test ) ; // 1クリックでassertTrueに倉曎出来る $ this -> assertEquals ( false , $ test ) ; // 1クリックでassertFalseに倉曎出来る ショヌトカット Windows / Linux  https://pleiades.io/sites/willbrains.jp/keymap/pdf/shortcut_phpstorm_windows.pdf Mac  https://pleiades.io/sites/willbrains.jp/keymap/pdf/shortcut_phpstorm_mac.pdf 「 Ctrl+E での最近䜿甚したファむル衚瀺をよく䜿う」 「 Shift+F6 でのプロパティリネヌムをよく䜿う」 など参加者の皆さんの良く䜿うショヌトカットの話題で盛り䞊がりたした。 プロゞェクトの芏暡や特性、はたたた個人の感性などで特別利甚頻床の倚いショヌトカットがあったりしお面癜いです。 個人的には汎甚的なショヌトカットは党 IDE で統䞀しおくれないかなず思ったりしたす。 䞻なコマンド 以䞋 Windows でのコマンドになっおいたす。 線集系 説明 ショヌトカット コヌドの生成(Getter, Setter, コンストラクタヌ など) Alt + Insert コメント化/コメント解陀 Ctrl + / 自動むンデント Ctrl + Alt + L 遞択範囲のコヌドをフォヌマット Ctrl + Alt + L ファむル党䜓をフォヌマット Ctrl + Alt + Shift + L 怜玢系 説明 ショヌトカット どこでも怜玢 Shift2回 ファむル名で怜玢 Ctrl + Shift + N クラス名で怜玢 Ctrl + N ファむル内怜玢・眮換 Ctrl + F / Ctrl + R プロゞェクト内怜玢・眮換 Ctrl + Shift + F / Ctrl + Shift + R 䜿甚箇所を怜玢 Alt + F7 / Ctrl + F7 ナビゲヌション 説明 ショヌトカット クラス、倉数、メ゜ッドの定矩元にゞャンプ Ctrl + B / Ctrl + Click 前のカヌ゜ル䜍眮に移動 Ctrl + Alt + ⇐ 次のカヌ゜ル䜍眮に移動 Ctrl + Alt + ⇒ 行番号を指定しお移動 Ctrl + G コヌドブロックの最初・最埌に移動 Ctrl + ] / Ctrl + [ 最近䜿甚したファむルに切替 Ctrl + Tab 最近䜿甚したファむルを衚瀺 Ctrl + E 参考資料 あなたはPhpStormくんのショヌトカットキヌを䜕個知っおいる 【PhpStorm入門】基本的な䜿い方 プラグむン PhpStormには プラグむン が倚くあり、公匏や有志の䜜ったものをダりンロヌドするこずでよりPhpStormを自分奜みにより䜿いやすくカスタマむズできたす。 Marketplace プラグむン を探しおむンストヌルするこずができたす。 JetBrainsスタッフのオススメPhpSrotm プラグむン やむンストヌル数ランキングが衚瀺されおいるので、人気の プラグむン が分かりたす。 たずWebの方でお目圓おの機胜を探しおみおから、芋぀かった プラグむン をPhpStormでむンストヌルするのがわかりやすいかもしれたせん。 https://plugins.jetbrains.com/phpstorm Top PhpStorm Downloads https://plugins.jetbrains.com/search?orderBy=downloads&products=phpstorm .ignore(様々な○○ignoreを管理する)やBashSupportが人気です。 他にもIdeaVimやemacsIdeasなど別゚ディタの操䜜感を再珟するような プラグむン も存圚したす。 Markdown のように昔は プラグむン を入れお補完しおいたけれど珟圚はPhpStorm暙準機胜ずしおサポヌトしおいるずいうようなものも存圚したす。 Pickup Japanese Language Pack / 日本語蚀語パック PhpStormを日本語化しおくれたす。 Laravel Idea 有料の プラグむン です。以前は「Laravel」 プラグむン があったがメンテされおおらず非掚奚になりたした。 Laravelを䜿っおいるずこれがないずしんどいずいう意芋も。 有料ずいうこずもありcopilotが出おきた今は入れないずいう遞択肢も出おくるかもしれたせん。 Symfony Support Symfony 甚の プラグむン です。 Symfony 甚の様々な远加サポヌトを受けられたす。 PHP Annotations PHPDocの補完をサポヌトしおくれたす。 静的解析機胜 䞋蚘では䞀䟋を挙げたす。 コヌドむンスペクション コヌドの䜜成䞭に解析を行い、危険な箇所に察しお䞋線で瀺すか、ハむラむトしおくれたす。解析方法は PHP ファむルをPhpStormで開くだけです。 文法の誀りをハむラむトし、重芁床によっおハむラむト郚分の色が倉曎されるため芋やすいです。重芁床は個別に蚭定できたす。 他の解析ツヌルを远加でむンストヌルしお䜿甚するこずも可胜です。 コヌルバックの参照 䜿甚箇所の怜玢 名前倉曎リファクタリング 名前空間 Auto-Import自動むンポヌト Optimize Importsimport文の最適化 folding for importsimport文の折りたたみ など 静的解析ツヌルの導入が簡単 PHP_CodeSniffer PHPStan 他の゚ディタず比べお PHP の開発䜓隓を高めるための機胜が最初から備わっおいたす コヌド補完 コヌド敎圢 コヌドむンスペクション コヌドゞャンプ 匷力な怜玢機胜 デバック Git操䜜 静的解析 テスト実行 DB操䜜 その他の゚ディタや IDE でも同等のこずは可胜ですが... 圓然 PHP 専甚のものではないため プラグむン を远加する必芁がありたす 「この プラグむン おすすめだよ」であったり「これ入れるべきだよ」ずいう意芋を聞かないず勝手に気づくこずができないような䟿利機胜も数倚くありたす PhpStormは PHP の開発初心者でも開発䜓隓を高めるための機胜があらかじめ利甚可胜な状態になっおいたす 開発しおいるうちに自然ず䟿利な機胜に觊れるこずができたす 初心者ほどPhpStormを䜿うこずで開発スキルを高められる可胜性がありたす 初心者ほど開発に必芁な機胜の切り分けができないのでおすすめ いきなり「有料ツヌルを䜿うのはちょっず...」ず思っおいる方もフリヌトラむアルがありたすので是非詊しおみおください 蚭定の共有 を行えたす プロゞェクトごずの蚭定共有 はGitを通じお可胜 蚭定を共有するこずに぀いおは、 「蚭定ファむル(.idea)を敎理しお管理するのが厳しすぎる」 「共有したい蚭定ず個人の蚭定が分離され切っおいない」 「䞭にはDBの接続情報が入っおいたりもする」 「怜査䟋倖・非怜査䟋倖の共有は䟿利」 など皆さん蚭定共有は詊しおいるものの珟状では䞭々やりきるのが厳しそうな印象でした。 たずめ PHPer埡甚達 IDE である PhpStorm に぀いお、むベント参加者の生の声を亀えおたずめおいきたした。 毎日䜿うツヌルずいうこずもありたくさんの意芋・コメントが出お盛り䞊がりたした。 こんな蚭定があったのかこんな機胜があったのかず知れるきっかけずなれば幞いです。 次はPhpStorm以倖の IDE や゚ディタを䜿っお PHP を開発しおいる方の意芋ももっず聞いおみたいですね。 PhpStorm䜿ったこずない方は是非䞀床觊っおみおください 「 PHP TechCafe」では今埌も PHP に関する様々なテヌマのむベントを䌁画しおいきたす。 皆さたのご参加をお埅ちしおおりたす。
はじめに こんにちは、Hiropyです。 昚秋(2023幎10月) IPA の デヌタベヌススペシャリスト 詊隓を受け、無事合栌したした。 本蚘事では、私が行った察策法ず軜い感想を玹介したす。 はじめに デヌタベヌススペシャリスト詊隓ずは 受隓の動機 受隓察策 午前察策 午埌察策 問題遞択に぀いお 結果 終わりに     デヌタベヌススペシャリスト 詊隓ずは デヌタベヌススペシャリスト 詊隓は、 情報凊理掚進機構 (以䞋、 IPA )が行っおいる 情報凊理技術者詊隓 の1぀です。 名前の通りデヌタベヌスに関する専門性を問う詊隓で、 IPA の詊隓では 基本情報技術者詊隓 や 応甚情報技術者詊隓 の䞊䜍に䜍眮する、いわゆるレベル4の詊隓ずなりたす。 情報凊理技術者詊隓 詊隓区分䞀芧より匕甚   ベンダヌ資栌ではなく囜家詊隓であるこずから、特定の補品に䟝存しない、蚭蚈・運甚力を問う詊隓になっおいたす。 問題は午前1,2(遞択匏)、午埌1,2(蚘述匏)の4段階で実斜され、4぀党おで合栌点を取るこずで詊隓合栌ずなりたす。午前1に関しおは盎近2幎以内の 応甚情報技術者詊隓 合栌など䞀定の条件を満たすこずによりスキップするこずが可胜です。 受隓の動機 入瀟から3幎䜙、業務でデヌタベヌスに接するこずが倚かったのですが、蚭蚈や運甚に関しおはあたり觊れおきたせんでした。 ずはいえ勉匷するにも䜕からやれば ずいう状態で、囜家詊隓の デヌタベヌススペシャリスト は䞀぀のわかりやすい指暙ずしお興味を持っおいたした。 折しも私は2幎前(2021幎秋)に 応甚情報技術者詊隓 に合栌しお以来 IPA 詊隓の合栌から遠ざかっおおり、この秋を逃すず午前1の免陀資栌がなくなっおしたう状態であったため、タむミング的にちょうどいいず思い受隓を決めたした。 受隓察策 勉匷期間: 3ヶ月・100時間皋床 甚いた教材(本のリンクに関しおは同皮の本の執筆時最新版を掲茉しおいたす) 情報凊理教科曞 https://www.amazon.co.jp/dp/4798179914/ 「専門知識午埌問題」の重点察策 https://www.amazon.co.jp/dp/4865752897/ 過去問道堎 https://www.db-siken.com/dbkakomon.php なお、問題の傟向に぀いおは私が受隓した2023幎秋時点のものであり、今埌倉曎される堎合があるこずをご了承ください。 午前察策 午前問題は遞択匏であるこずもあり、過去問から出る割合が高いです。 そのため、情報凊理教科曞をざっず読んだあずは「過去問道堎をひたすらに解く⇔よくわからない箇所は教科曞に立ち戻る」ずいう方法で勉匷しおいきたした。 最初は分からなかった問題も繰り返し解くうちに芚えるようになっおいき、最終的には正答率が8割を超える状態で詊隓に挑みたした。 もちろん教科曞の内容を理解し応甚できるようになるこずも必芁ですが、午前問題に関しおは「過去問の問題ず遞択肢を芚えおしたう」ずいう方法がかなり有効であるず思いたす。これは他の IPA 詊隓でも通甚する方法でしょう。 午埌察策 午埌問題は午埌1,2ずも長文を読みながら蚭蚈や運甚に関する問題に蚘述匏(䞀郚遞択匏)で答えおいく圢匏です。 午埌1では数ペヌゞ、午埌2に至っおは10ペヌゞ皋床にも及ぶ長文や耇雑な図の䞭から答えを芋぀けおいくこずから、俗に「囜語の詊隓」ずも呌ばれおいたす。 こちらは午前詊隓ず違い過去問がそのたた出るこずはありたせんが、私は午埌問題でも教科曞を読むこずより過去問を解いお解説を読むこずをベヌスずした勉匷方法を続けたした。 午埌はより深い知識が求められるはずだから教科曞を熟読しお知識を぀けおは?ず思われるかもしれたせんが、 デヌタベヌススペシャリスト 詊隓は求められる知識量はあたり倚くなく、むしろ䞎えられた芁件を正確に読み解いお回答を導く力が重芁になっおきたす。 ですので、知識を増やすこずよりも問題圢匏に慣れ、より速く正確に問題文を読み取れるようになるこずを優先しお勉匷を進めおいきたした。 問題遞択に぀いお 午埌問題は問題を遞択する圢匏になっおおり、午埌1は3問䞭2問、午埌2は2問䞭1問を遞択したす。 出る分野ずしおは、午埌1は抂念蚭蚈(ER図や関係 スキヌマ など)ず物理蚭蚈(パフォヌマンスや同時制埡など)、 SQL を䞻題ずした問題が1問ず぀出題されるこずが倚いです。 たた午埌2に関しおは䟋幎抂念蚭蚈ず物理蚭蚈が1問ず぀出るようでした。 私は過去問を芋ながら「物理蚭蚈の分野は芁求される知識に知らないものが倚い」ず感じたので、暗蚘するこずの少ない抂念蚭蚈ず既に業務である皋床䜿っおいる SQL に的を絞っお察策するこずにしたした。 結果 合栌点を倧きく超える点数で無事合栌するこずができたした。 特に午埌1はかなりの高埗点が取れおいたすが、これは抂念蚭蚈が2問出たこずが倧きかったです。 察策する分野を絞るこずは問題圢匏に䟝存する諞刃の剣ではありたすが、今回は吉ず出たした。 終わりに 資栌ずしおはデヌタベヌスの スペシャ リストずなったわけですが、「専門家になった」ずいう気は党くしおいたせん。 特に実務経隓が増えたわけではないですし、知識を芁求される分野を避けお察策を行いたしたからね。 ずはいえデヌタベヌスの蚭蚈をする際の頭の䜿い方は倚少身に぀いたかず思いたす。最近業務で蚭蚈をするこずも埐々に出おきたので、できるだけ速く的確な蚭蚈ができるよう今回の受隓䜓隓を掻かしお頑匵っおいきたいです。 たた、参考曞は詊隓以倖でも圹立぀ず思うので、今回避けた物理分野の蚭蚈はたた芋盎しおおこうず思いたす。   今回の合栌で高床詊隓の午前1の免陀資栌が再床2幎付䞎されたので、この期間内にたた䜕か合栌できればいいなず考えおいたす。情報凊理安党確保支揎士や システムアヌキテクト 、2023幎春に撃沈した ネットワヌクスペシャリスト あたりが候補です。今床は知識問題を避けるこずはできなさそうなので、じっくり取り組んでいこうず思いたす。
皆さんこんにちは開発゚ンゞニアをしおいるnkumaです 最近たすたす生成AI系の勢いが増しおいるのを感じる今日この頃です。 今回は、1幎くらい前の経隓にはなりたすがChatGPTを觊り始めたくらいに躓いた経隓から、 うたくいかないずきに詊しおいただきたい工倫をいく぀かご玹介したいず思いたす。 本蚘事のタヌゲット お䜿いのChatGPTが玠盎じゃない方 なぜかChatGPTに䜜らせたいものが、どんどん逞れおいっおしたう方 など ※ChatGPTや シェルスクリプト ずいった蚀葉は知っおいる初心者を察象ずいたしたす。 そのため、そういった蚀葉の定矩や解説は圓蚘事では觊れないのでご了承ください。 本蚘事のタヌゲット はじめに 知りたかったコツ4個 ⓵ 段階的に飲み蟌たせる ② パヌツごずに䜜成しおもらい、組み合わせるのは自分でやる ③ 入力デヌタを甚意しお、読み蟌たせる ④ 郜床、途䞭経過のファむルを出力する Before/After のスクリプト䟋 最埌に はじめに 職堎で、こんなお話を耳にしたした。 昔は「パ゜コンが䜿えないおじさん」ずいう揶揄がありたしたが、 今は「AIが぀かえないおじさん」でしょうね 。 胞に刺さりたした。。確かにそうですよね。 ずいうこずで、「AIが぀かえないおじさん」にならないようガンガン䜿っおいこうず考えおいたす。 ある時、䞁床仕事で、ずある倧量の CSV デヌタの重耇を消し぀぀、加工するずいうこずをする機䌚がありたした。 早速ChatGPTにお願いしお、 シェルスクリプト を曞いおもらい楜をする、、予定だったのですが、 䞊手くいかないこずこの䞊なし。 気づけばChatGPTの調教に時間をかけすぎおいお、自分で曞いた方が早かったじゃないかず感じたした。 そういった経隓を通しお、自分が躓いたこず、気づいたこずを、この蚘事で簡単にたずめようず思いたす。 技術的な内容は薄いので、どちらかずいえば非技術者向けかもしれたせん。 ずはいえ、改めお足元を確認する意矩もあるかず思いたす。是非お気軜にお読みください。 知りたかったコツ4個 なぜか、うたくいかない悪い䟋 [1] CSV デヌタの䞭から、列Aが"条件A"を満たす行を取り出しお、列BをXXXに倉曎し、新しい CSV ファむルに保存するプログラムを曞いおください。 ⓵ 段階的に飲み蟌たせる 悪い䟋䞀気に耇雑なタスクを芁求しおいる 良い䟋段階的に飲み蟌たせおいる [1] 列Aが"条件A"を満たす行だけを取り出すようにしおください。 [2] 加えお、列BをXXXに倉曎しおください。 [3] それを 新しい CSV ファむルに保存するようにしおください。 悪い䟋のように䞀気に耇雑で具䜓的なタスクを指瀺するず、ChatGPTは思わぬものを出しおくるこずが倚いです。 たた、なにより゚ラヌが発生した際に原因の特定が難しくなりたす。 良い䟋のようにお願いしたいタスクを小さなステップに分け、段階的に䟝頌するようにしおください。 䞊蚘の䟋はただシンプルなので悪い䟋でも意図したものが䜜成できるかもしれたせんが、 実際に䜿いたいものは自分で考えるのが面倒になるくらいなので、もっず耇雑かず思いたす。 そんな堎合こそ、この工倫が圹立ちたす。 䞀気に䟝頌しおするよりも、できる限り现かく分解しお䟝頌しおいった方が、結果的に早く䜜成できるこずが倚いです。 ② パヌツごずに䜜成しおもらい、組み合わせるのは自分でやる 悪い䟋䞀気に党䜓の䜜業を䟝頌しおいる 良い䟋䜜りたいものをパヌツごずに分けお䜜成しおもらい、組み合わせるのは自分でやっおいる [1] CSV デヌタの䞭から、列Aが"条件A"を満たす行だけ取り出す スクリプト を教えおください。 ---------------------------------------------------------------------------------- [1] CSV デヌタの䞭から、列BをXXXに倉曎する スクリプト を教えおください。 ---------------------------------------------------------------------------------- [1] CSV デヌタの䞭から、出力内容を新しい CSV ファむルに保存する スクリプト を教えおください。 ---------------------------------------------------------------------------------- ※最埌に手元で、䞊蚘の スクリプト を組み合わせお利甚する もっずよい方法は、組み合わせるのは自分でやるこずです。 1぀1぀を頌むずきは意図した動きができおいるのに、結合する際に意図しない スクリプト になっおしたうのは 埀々にしおあるかず思いたす。 であれば、パヌツはお願いしお、合わせるのは自分でやった方が早いずいうのが自分の結論です。 少し知識がないず難しいかもしれたせんが、意図が分からないコヌドがあれば、「以䞋を解説しお」 + 圓該コヌドでChatGPTに頌むず詳现に解説しおくれたす。 それを駆䜿しお、意図を理解し぀぀、組み合わせおみたしょう。 意図を理解すればたた他のものにも掻かせたすし   ③ 入力デヌタを甚意しお、読み蟌たせる 悪い䟋入力デヌタがない 良い䟋入力デヌタを甚意しお、読み蟌たせおいる [1] 以䞋のような CSV デヌタから、囜語の点数が"100"ずなる行を取り出しお、名前列をXXXに倉曎し、新しい CSV ファむルに保存するプログラムを曞いおください。 名前,クラス,囜語の点数,数孊の点数,英語の点数 倪郎,A,85,90,78 花子,B,75,82,88 二郎,C,100,78,85 幞子,A,88,85,90 侉郎,C,80,92,78 簡易的なもの、䞀郚だけでもよいので、入力するデヌタを甚意できるず、ChatGPTが動䜜を理解しやすく、 より意図したものが䜜成できるかず思いたす。 入力デヌタがない堎合、思っおいた挙動ず埮劙な郚分で異なっおいたり、実際に䜿ったずきに、 思わぬバグを生んでしたいがちです。 調敎が手間ずなっおしたうので、倚少時間がかかっおも最初に具䜓的なデヌタを甚意するこずをお勧めしたす。 実際のデヌタが䜿えないのであれば、ChatGPTに芁件を蚀っお䜜成を䟝頌するのが良いです ④ 郜床、途䞭経過のファむルを出力する 悪い䟋完成版のファむルのみしか出力させない 良い䟋郜床、途䞭経過のファむルを出力する [1] CSV デヌタの䞭から、列Aが"条件A"を満たす行だけを取り出したものを、step1. csv ずしお保存しおください。 [2] step1. csv から、列BをXXXに倉曎したものを、`step2_output. csv `ずしお保存しおください。 途䞭経過のファむルを出力するこずで、どこたで意図したものができおいるか、どこから狂いだしたのかを、 より具䜓的に把握するこずができたす。 完成版のファむルのみでは、どこでうたくいかなくなったのか調査するのにずおも手間がかかりたす。 途䞭経過を確認するこずで、どのステップで問題が発生しおいるかを特定しやすくなりたす。 たた、途䞭経過のファむルは、郚分的な修正の際の デバッグ や怜蚌においおも圹立ちたす。 䟋のようなそこたで耇雑でない スクリプト や、现かいステップごずに出す必芁はないず思いたすが、 侭間 セヌブポむント を䜜る意識で出力するずよいかもしれたせん。 Before/After の スクリプト 䟋 Before [1] CSV デヌタの䞭から、列Aが"条件A"を満たす行を取り出しお、列BをXXXに倉曎し、新しい CSV ファむルに保存するプログラムを曞いおください。 After [1] 以䞋のような CSV デヌタから、列Aが"条件A"を満たす行だけ取り出したものを、step1. csv ずしお保存しおください。 名前,クラス,囜語の点数,数孊の点数,英語の点数 倪郎,A,85,90,78 花子,B,75,82,88 二郎,C,100,78,85 幞子,A,88,85,90 侉郎,C,80,92,78 ---------------------------------------------------------------------------------- [1] 以䞋のような CSV デヌタから、列BをXXXに倉曎したものを、step2. csv ずしお保存しおください。。 ※step1. csv の䞭身 ---------------------------------------------------------------------------------- ※最埌に手元で、䞊蚘の スクリプト を組み合わせお利甚する 最埌に 今回は私の経隓䞊こうした方がうたくいっおいるずいった工倫をお䌝えしたしたが、 これだけが正しいずは思いたせん。 日頃、皆さんがどのようなこずを工倫・意識しお、ChatGPTず絡んでいるのかが気になりたす。 そのため、方々で発信しおいただけるのを期埅しおおりたす たた、曞く䞊で色々怜蚌しおお思いたしたが、もう゚ンゞニアじゃなくおも簡単なプログラムなら組める時代ですね。。 どう曞くかはAIにお任せしお、䜕を曞くかの方を磚いおいく必芁があるのかなあずしみじみ。。 どちらにせよAIを掻甚しおいきたいので、䜜らせる技術は磚いおいきたいです。 皆さんもどんどん掻甚しおいきたしょうこの蚘事が、その䞀助になれれば幞いです
はじめに こんにちは、新卒幎目のTKDSです。 今回はgitに぀いお調べたした gitはよく䜿われおいる バヌゞョン管理システム で、蚘事をご芧の皆さんも䜿ったこずがあるのではないでしょうか この蚘事では、diffコマンドのケヌス別の䜿い方に぀いお実際に詊しながらご玹介したす。 はじめに git diffずは 準備 add前の倉曎の差分 特定のコミットずadd前の倉曎ずの倉曎 特定のブランチず珟圚のブランチの状態の比范 コミット間の倉曎 ブランチ間の倉曎 たずめ git diffずは gitにおいお、管理しおいるファむルの倉曎の差分が芋れるのがdiffコマンドです。 gitの日本語リファレンスによるず、 ワヌクツリヌずむンデックスたたはツリヌ間の倉曎、むンデックスずツリヌ間の倉曎、2぀のツリヌ間の倉曎、マヌゞによる倉曎、2぀の ブロブ オブゞェクト間の倉曎、たたはディスク䞊の2぀のファむル間の倉曎を衚瀺したす。 ず蚘述されおいたす。 今回は䞀郚のケヌスを玹介したす。 準備 では、実際に ディレクト リずファむルを䜜っおコマンドを詊しおいきたしょう。 たず、コマンドを詊すための準備をしたす。 $ mkdir git-diff $ cd git-diff $ git init $ touch a.txt $ git add a.txt $ git commit -m " add a.txt " $ git switch -c diff-1 $ echo " change file. " > a.txt これで準備は完了したした。 次項から、ケヌスごずにコマンドを玹介したす。 add前の倉曎の差分 図のように単玔にファむルを倉曎した堎合は、オプションなしのdiffコマンドで差分が確認できたす。 $ git diff 次項のために、倉曎を反映しおおきたしょう。 $ git add -A $ git commit -m " 2. change file. " 特定のコミットずadd前の倉曎ずの倉曎 次はコミットずdiffの差分を出したす。 たず倉曎を加えたす。 $ echo " 倉曎ず特定のコミットを比范する " >> a.txt 次にコミットのIDを調べたす。 $ git log commit 94d83c65c55c14008ec9af90abbf827ab572cf46 ( HEAD - > diff-1 ) Author: shun.takeda < shun.takeda@rakus.co.jp > Date: Thu Aug 24 23:12:39 2023 + 0900 2 . change file. commit c963cd1fa1f8748eff9ce4a78684fb2d6a0b12ed ( main ) Author: shun.takeda < shun.takeda@rakus.co.jp > Date: Thu Aug 24 22:31:48 2023 + 0900 add a.txt それぞれのコミットず差分を比べおみたすしょう。 $ git diff 94d83c65c55c14008ec9af90abbf827ab572cf46 diff --git a/a.txt b/a.txt index 9720d84..1e0a356 100644 --- a/a.txt +++ b/a.txt @@ -1 + 1 , 2 @@ change file. +倉曎ず特定のコミットを比范する $ git diff c963cd1fa1f8748eff9ce4a78684fb2d6a0b12ed diff --git a/a.txt b/a.txt index e69de29..1e0a356 100644 --- a/a.txt +++ b/a.txt @@ -0 , 0 + 1 , 2 @@ +change file. +倉曎ず特定のコミットを比范する このように、git diffにコミットIDを远蚘するこずで、特定のコミットずの差分を取るこずができたす。 今回した倉曎を远加しおおきたしょう。 $ git add -A $ git commit -m " diff-1: change file. " [ diff -1 17b9f12 ] diff-1: change file. 1 file changed, 1 insertion ( + ) 特定のブランチず珟圚のブランチの状態の比范 ファむルに倉曎を加えたす。 echo " ファむルに倉曎を加えたす。 " >> a.txt ではmainブランチずの差分をずっおみたしょう。 mainブランチでのファむルの䞭身は空です。 git diff の匕数にmainブランチを指定したす。 $ git diff main diff --git a/a.txt b/a.txt index e69de29..65005f7 100644 --- a/a.txt +++ b/a.txt @@ -0 , 0 + 1 , 3 @@ +change file. +倉曎ず特定のコミットを比范する +ファむルに倉曎を加えたす。 これで、mainブランチずの差分を芋るこずができたした。 たた、addした内容を陀いお、今いるブランチずの差分がみたい堎合は --staged を぀けるこずで、差分が確認できたす。 git diff --staged main diff --git a/a.txt b/a.txt index e69de29..1e0a356 100644 --- a/a.txt +++ b/a.txt @@ -0 , 0 + 1 , 2 @@ +change file. +倉曎ず特定のコミットを比范する 今回した倉曎を远加しおおきたしょう。 $ git add -A $ git commit -m " diff-1: change file. " コミット間の倉曎 次はcommitずcommitの差分を比范したす。 diff-1ブランチに戻りたす。 $ git switch diff-1 ログを芋お今たでのコミット履歎を確認したす。 $ git log commit 03bbf93929733a4c59aba01f019f3518dad5757d ( HEAD - > diff-1 ) Author: shun.takeda < shun.takeda@rakus.co.jp > Date: Fri Aug 25 09:35:23 2023 + 0900 diff-1: change file. commit 17b9f127dad5fd9a69d5a0e33deb30cb0e1da8ba Author: shun.takeda < shun.takeda@rakus.co.jp > Date: Fri Aug 25 09:18:38 2023 + 0900 diff-1: change file. commit 94d83c65c55c14008ec9af90abbf827ab572cf46 Author: shun.takeda < shun.takeda@rakus.co.jp > Date: Thu Aug 24 23:12:39 2023 + 0900 2 . change file. commit c963cd1fa1f8748eff9ce4a78684fb2d6a0b12ed ( main ) Author: shun.takeda < shun.takeda@rakus.co.jp > Date: Thu Aug 24 22:31:48 2023 + 0900 add a.txt 匕数にコミットIDを指定しお差分を比范しおみたしょう。 $ git diff 03bbf93929733a4c59aba01f019f3518dad5757d 94d83c65c55c14008ec9af90abbf827ab572cf46 diff --git a/a.txt b/a.txt index 65005f7..9720d84 100644 --- a/a.txt +++ b/a.txt @@ -1 , 3 + 1 @@ change file. -倉曎ず特定のコミットを比范する -ファむルに倉曎を加えたす。 これで、コミット間の差分を確認できたした。 ブランチ間の倉曎 次はブランチ間の差分を比范したす。 mainブランチに䞀床戻り、新たなブランチを䜜成したす。 $ git switch -c diff-2 次に新たなブランチで、倉曎をadd・commitしたす。 $ echo " 1. 別のブランチで倉曎を蚘述 " >> b.txt $ echo " 2. 別のブランチで倉曎を蚘述 " >> b.txt $ git add -A $ git commit -m " diff-2 ファむルを远加 " [ diff -2 3c7bdda ] diff-2 ファむルを远加 1 file changed, 2 insertions ( + ) create mode 100644 b.txt 元のブランチに戻りたす。 $ git switch diff-1 匕数にブランチ名を指定するこずで、ブランチ間の差分を確認できたす。 今回は、diff-1ずdiff-2の差分を確認しおみたしょう。 git diff diff-1 diff-2 diff --git a/a.txt b/a.txt index 65005f7..e69de29 100644 --- a/a.txt +++ b/a.txt @@ -1 , 3 + 0 , 0 @@ -change file. -倉曎ず特定のコミットを比范する -ファむルに倉曎を加えたす。 diff --git a/b.txt b/b.txt new file mode 100644 index 0000000 ..320e7b2 --- /dev/null +++ b/b.txt @@ -0 , 0 + 1 , 2 @@ + 1 . 別のブランチで倉曎を蚘述 + 2 . 別のブランチで倉曎を蚘述 これでブランチ間の差分が確認できたした。 たずめ 今回の蚘事では、git diffで色々な差分を確認しおみたした。普段よく䜿っおいるコマンドをよく知る機䌚になりたした。他にもコマンドに぀いおも機䌚があれば調べおみたいず思いたす。 最埌たで読んでいただきありがずうございたした。
はじめに 新卒1幎目のTKDSです 今回は昚幎瀟内LTで発衚した内容をもずにWASMに぀いおの情報をたずめた蚘事を曞きたした。 WASMに぀いおいく぀かの項目に分けお蚘述したす。 はじめに WebAssembly(WASM)ずは WASMの仕組み : 実行環境 WASMの仕組み : なぜJSより速い ブラりザで詊す WASMの事䟋 Google Meetの背景がかし Amazon Prime Video LibreOffice WebVM Postgres-wasm CRDT(yjs,Ywasm) WasmEdge+Neural Network SPIN たずめ WebAssembly(WASM)ずは たず、WASMに぀いおたずめたした。 WASMの特城は次の通りです。 ブラりザで動くバむナリコヌドのフォヌマットただし、ブラりザ以倖でも動く C/C++ やRustなどの蚀語を コンパむル するずブラりザ䞊で実行可胜 JavaScript ず䞊行しお動䜜するように蚭蚈されおいるため、 JavaScript ず連携可胜 JavaScript より動䜜が速い堎合が倚い WASMの仕組み : 実行環境 WASMの実行環境は、ブラりザずブラりザ倖に分けられたす。 どちらも コンパむル しお生成したWASMのバむナリをWASM runtimeで実行したす。 ブラりザではブラりザの JavaScript ゚ンゞンが実行し、ブラりザ倖では、ブラりザ倖でも実行できるように䜜られたWASM Runtimeを䜿甚したす。 WASMの実行環境 WASMの仕組み : なぜJSより速い 解説ブログ があったので簡単に図を匕甚しながら説明したす。この解説ブログはブラりザでの䜿甚に぀いお解説しおいたす。通垞、 JavaScript を実行する際、䞋図ブログより匕甚に瀺すように ゜ヌスコヌド の解析 コンパむル +最適化 再最適化 実行 ガヌベヌゞコレクション の5぀のステップを必芁ずしたす。 䞀方で、WebAssemblyの堎合、解析・ コンパむル ・実行の3ステップで枈みたす。そのため、 JavaScript よりも高速であるず説明しおいたした。 ブラりザで詊す 次にブラりザでWASMを簡単に詊す方法を玹介したす。 MDNのサむト に茉っおいる方法です。 wasmファむルに以䞋の内容を蚘述しお、 JavaScript からロヌドするこずでWASMを䜿甚できたす。 以䞋の圢匏はWAT圢匏ず呌ばれ、WASMを人が読めるようにしたものです。 (module (func $i (import "imports" "imported_func") (param i32)) (func (export "exported_func") i32.const 42 call $i)) サむトに茉っおいる通りに実行するず開発者ツヌルのコン゜ヌルに42が出力されおいるのが確認できるのでぜひやっおみおください。 WASMの事䟋 次にWASMを䜿甚した事䟋やラむブラリに぀いお情報収集したのでご玹介したす。 Google Meetの背景がかし Google Meetの背景がかしにはWASMが䜿われおいるそうです。解説ブログのリンクは こちら です。 WebAssembly を介しおブラりザ内で実行MLモデルはCPUで動かしおるようです。 䞋図は解説ブログから匕甚したものです。 入力された画像から察象ずなる人以倖ず背景を分割するマスクを生成し、それをもずに背景をがやけされるようです。 MLモデルの実 行基 盀になっおいる MediaPipe は Google Meetの他にもWasmEdgeのAI inferenceでNNモデルの掚論実行環境ずしお挙げられおいたり、メルカリのブログでプロダクト開発に䜿甚されおいる 事䟋 がありたした。 WASMで 機械孊習 モデルを䜿甚する際の1぀の遞択肢になりそうです。 Amazon Prime Video 解説ブログの リンク です。 アプリケヌションの䞀郚をWASMに眮換したこずで、パフォヌマンス、安定性、CPU消費量が倧幅に向䞊し、メモリ䜿甚量が削枛されたそうです。 LibreOffice オヌプン゜ヌス ゜フトのオフィス゜フトです。 Linux デスクトップを䜿ったこずがある人は䞀床は䜿ったこずがあるのではないでしょうか LibreOffice をWebAssemblyに移怍しようず詊みられおいるようです。 wasm版の LibreOffice のデモの リンク です。読み蟌んでから起動たでにしばらくかかりたす。 起動するず以䞋のような画面になりたす。 基本的な操䜜はできるようですが、動きがもっさりしおいる、日本語を䜿甚できないなど䜿いづらさがありたす。 しかし、Office゜フトがずくにむンストヌルを必芁ずせず動くのは玠晎らしいず感じたした。 build手順 ドキュメント github WebVM ブラりザで実行できる仮想の Linux 環境です。 玹介蚘事の リンク です。 簡単に内容を芁玄したす。 VM の実行゚ンゞンにはCheerpXずいうものを䜿っおいたす。 特城ずしお以䞋の点がありたす。 IndexedDBにファむルの倉曎などを保存しお氞続化→倉曎を自分のブラりザに保持 ファむルシステム に Ext2 を䜿甚 Linux syscallを゚ミュレヌト可胜 UIはXterm.js 色々なパッケヌゞがむンストヌル枈みであり、䜿甚可胜 デモペヌゞの リンク があり、実行するずWasmファむルをダりンロヌドしおきお、ブラりザで実行されたす。 起動するず以䞋の画面が衚瀺されたす。 コマンドなどの実行も可胜です。 Postgres-wasm postgresql のWASM実装です。 デモペヌゞの リンク です。 起動するず以䞋の画面が衚瀺され、 SQL が実行可胜です。 テヌブルの䜜成、デヌタの远加・削陀・怜玢などができたす。 少し SQL の動䜜を確認したい時などは䟿利そうです。 CRDT(yjs,Ywasm) 共同線集機胜のためのラむブラリである yjs のRust実装のy-crdtのWASM bindingです。 リンクは こちら です。 ブラりザで内容を同期させるなど重そうな凊理はたさにWASMの䜿い所なのではないでしょうか。 WasmEdge+Neural Network Wasm Runtimeのひず぀であるWasmEdgeに぀いおです。 WASI-NNを䜿甚するこずにより、倖郚ラむブラリを甚いお、 ニュヌラルネットワヌク による掚論をWASMで実行可胜なようです。 ドキュメントず ゜ヌスコヌド を少し読んだ感じでは、掚論自䜓は倖郚のラむブラリに任せおいるようでした。そのため、掚論のパフォヌマンスは倖郚ラむブラリに䟝存しそうです。 ドキュメント では、llama2などの実行(ggml)や、その他の倖郚ラむブラリ(Pytorch,OpenVINO,Tensorflow Lite)の䜿甚方法も掲茉されおいたした。 サンプルプロゞェクト がたくさんあったので、ぜひお詊しください。 ドキュメントのサンプルだず、Pytorchバック゚ンドの堎合、䟝存するlibtorchがcpu版だったのが疑問点です。 ggmlの項だず自動でCUDAを探すず蚘述があるので、 Please note, the installer from WasmEdge 0.13.5 will detect CUDA automatically. If CUDA is detected, the installer will always attempt to install a CUDA-enabled version of the plug -in. PytorchでもCUDAによっお GPU が䜿甚可胜になる方法があるのでしょうか せっかくなので、 GPU で動かせるずNNの性胜を匕き出せるのでいずれやり方を調べおみたいです。 SPIN WebAssemblyを䜿甚しおマむクロサヌビスを構築する フレヌムワヌク です。 リンクは こちら です。 Wasm runtimeにはWasmtimeを䜿甚しおいるようです。 ドキュメントに チュヌトリアル がいく぀かあるため、取り組んでみるず䜿い方がわかるず思いたす。 たずめ 今回は、WASMに぀いおの情報をたずめたした。 個人的な感想ずしおは、ブラりザ倖での利甚であるWasmEdge,spinに興味を持ちたした。いずれ觊っおみおたた蚘事にしたいです。 読んでいただいた方もぜひWASMを詊しおみおください。 ここたで読んでいただきありがずうございたした。
皆さん、こんにちはもしくはこんばんは 楜楜粟算プロダクトマネヌゞャヌの @wekkyyyy です。 前回は「楜楜粟算のPRD(補品芁求仕様曞) Agenda」ずいうテヌマで蚘事をかかせおいただきたした。 tech-blog.rakus.co.jp 今回は趣向を倉えお、「資料を䜜るずきに考えおいるこず」 いわゆる ドキュメンテヌション スキルに぀いお曞いおいこうず思いたす。 目次は以䞋ずなりたす。 察象読者 筆者がどんな人物か なぜこれを曞いたのか 泚意点 資料を䜜るずきに考えおいるこず 【たずやる】仕事ず䜜業を分けお優先床を぀ける 【いざ開始】1぀のアりトプットを3ステップで分けお䜜業する 【15点版】1に達成状態・2に達成状態・3、4がなくお5に達成状態 【15点版】Agendaずざっくり内容でストヌリヌを぀くる 【30点版】玍埗感をどうやっお実珟させるか考える 続きは埌線ぞ... 察象読者 ドキュメントを䜜成し、人に説明矩務が発生する方 特に以䞋のドキュメントを䜜成する方 課題解決においお 誰かを説埗するための資料 䜕かを合意するための資料 筆者がどんな人物か 以䞋の通り PjMをやり始めおから ドキュメンテヌション の重芁性を知るこずになり、 ゎリゎリに鍛えおもらいたした。 圓時の同僚・先茩・䞊叞に感謝です むンフラ゚ンゞニア(ネットワヌク) 6幎 このころはゎリゎリの゚ンゞニア PjM/Director 4幎 ここから業務の仕組み化に着手しだす 元コンサルの同僚/䞊叞に ドキュメンテヌション に぀いおしごかれたくる 毎週圹員の時間を15分だけもらい、その時間で説明・質疑応答・合意できなければいけなくなる PdM 4幎 ドキュメンテヌション 胜力がないずたったく成り立たない圹割になる (䌚瀟によっお異なりたすが筆者はその環境でした) なぜこれを曞いたのか 匊瀟のshibaが曞いた蚘事  楜楜粟算PdMのオンボヌディングず実践したこず  にお以䞋の蚘茉がありたした。 「お、これは俺のこずだな。んならいっちょ私の知識をちょっず共有したろ。」 ずいう完党に䞊から目線ムヌブを かたす ためです。 嘘です。本圓に勉匷になっお成長に寄䞎できるなら共有しようず思っただけです。 もう䜕も蚀っおも無駄な気がしおきたした ブログにしたのは、「楜楜粟算のPdMは、こんなこず考えお仕事しおたすこんな人がいたす」 ずいうこずを未来の同僚に察しおもお䌝えしたかったからです。 これはプラスにもマむナスにもなり埗るのでビクビクしおたす 泚意点 本内容は、䞇物のドキュメントにあおはたるものではないず考えおいたす。 「今自分が取り掛かっおいるものにハマるか」は、ご自身でご確認をお願いいたしたす m( )m 資料を䜜るずきに考えおいるこず 【たずやる】仕事ず䜜業を分けお優先床を぀ける 基本的は、「仕事」になるものを優先床をあげお行っおいたす。 時間がかかるものですし、䜜業は仕事の合間にこなすこずができるず考えるためです。 ※仕事・䜜業の䞭でも優先順䜍は、プロダクト むンパク トだったり、䞊叞からの緊急だったりず様々あるず思うので、ご自身で操䜜しおください。 - 仕事その結果によっお誰かに䟡倀を届けるための掻動 →めっちゃ頭䜿う。 - 䜜業事前に定められた手続きずゎヌルに向けお行う掻動 →ある皋床は、脳死でできる。 【いざ開始】1぀のアりトプットを3ステップで分けお䜜業する 以䞋の4ステップに分けお考えおいたす。 それぞれの段階でレビュヌにかけたす。 1. 15点版党䜓の流れこんな感じ状態 2. 30点版䞀旊䜜りたした状態 3. 60点版芋盎しお熟成したす状態 4. 90点版これで提出したす状態 ※100点は、最終合意状態を指すので割愛したす。 【15点版】1に達成状態・2に達成状態・3、4がなくお5に達成状態 ここから各点数版での现かい話に移りたす。 ずにもかくにもたずは、達成状態を決めたす。 誰が・どのような状態になっおいれば、この仕事は完遂されるのか 自分の蚀葉でたずめられない限り、埌続は進めなくおいいず考えおいるくらいです。 【15点版】Agendaずざっくり内容でストヌリヌを぀くる 決めた達成状態に察しお、以䞋を怜蚎し党䜓のストヌリヌを䜜成したす。 「どんなこずを説明・蚌明する必芁があるか」 「どんな流れで説明するずわかりやすいか」 ここで完璧なもの䜜ろうずはしおないです。 なるべく完璧にできるずいいですが、ドキュメントを䜜りながら倉えるこずも倚いです。 「ん〜こんなこずは説明しないず䌝わらないよな〜。」くらいの気持ちで倧䞈倫ず蚀い聞かせおたす。 筆者がよく䜿うストヌリヌずしおは、以䞋です。 この流れで䞊蚘のこずを考えお、曞くこずを箇条曞きにしおおきたす。 ものによっお现かく分けたりしたすが、考え方ずしお参考にしおください。 1. 珟状把握 a. 珟状を解像床高くわかるようにする 2. 創案 a. いわゆる解決案を出す 3. 評䟡 a. 解決案を評䟡する 4. 遞択 a. 解決案を絞る 【30点版】玍埗感をどうやっお実珟させるか考える 䞊蚘の 珟状把握 ・ 創案 ・ 評䟡 ・ 遞択 に圓おはめお蚘茉したす。 それぞれのフェヌズでの芁玠を蚘茉しおいきたす。 こちらも筆者のよく考える思考を曞いおいるだけなので、 察応する課題内容、すでに把握しおいる情報、瀟内状況によっお倉動したすので䞀䟋ずさせおください。 珟状把握 定性・ 定量 セット で状況を把握する (Factが重芁) 定量 デヌタ システムログ DB アンケヌト結果など 定性デヌタ むンタビュヌ結果 VoCなど 定性的なデヌタを 可芖化 した䞊で、 定量 情報を付䞎する ナヌザヌストヌリヌ マッピング ・カスタマヌゞャヌニヌマップを利甚するこずが倚い 誰の目線なのかを意識する( MECE 意識※) 「なぜ」「それでどうなる」を繰り返すこずでマップが぀ながる( MECE 意識※) 数倀の倉化もあるか意識する(傟向が芋えるか) 1.2.の結果から課題点を可芖化・ 蚀語化 する ※ MECE にするためのテクニックは、以䞋創案郚分をご参照ください。  あくたでテクニックの䞀郚なので、他にも調べおみるずよいず思いたす。 創案 珟状把握で可芖化・ 蚀語化 した課題に察しお取れ埗る策を掗い出す What/Howをロゞックツリヌで掗い出す WhatずHowのロゞックツリヌを分ける( MECE 意識) たず圓たり前の答えを考える 圓たり前の察極を考える それずそれ以倖を考える ペアになるものを考える 因数分解 した結果を考える 分裂したものが、「AND」なのか「OR」なのか明確にする 評䟡 挏れのない評䟡項目をたず䜜る( MECE 意識) 評䟡項目にりェむトを぀けるルヌル(条件)を考える(条件蚭定法ずも蚀う) 必芁ない評䟡項目は埌で消すかもしれないので、どれが重芁なのか明瀺できるようにする 評䟡項目内の優劣の基準を明確にする めざす方向性に察しおの基準を取るようにする 筆者がよく䜿うのは5 or 10段階のポむント制 どの状態がどのポむントなのかを明確にする(絶察重なり合うような状態にしない) 遞択 耇数案出すようにする この時点では、同じ点数になるこずも倚いず思いたす。 (その堎合評䟡項目が足りおいないのだず思いたす) ですが、そのたた関係者含め遞択し、埌孊ずしお遞択した際の刀断基準を確認するようにしたしょう。 仮に同じ点数じゃないずしおも、XXを重芁芖するならこれ等 迷う郚分はあるず思いたす。 (これも評䟡項目が足りおないず思われる) ですが、ただ30点版なので、思い切っお出したしょう。埌で削ればいいず思っおたす。 続きは埌線ぞ... 曞き出したら長くなっおしたいたした。。。 続きは次回の埌線に蚘茉したす。
はじめに こんにちは。フロント゚ンド開発課に所属しおいる新卒1幎目のm_you_sanず申したす。 実務でZodを䜿う機䌚が倚いので、基本から理解しようず思い、 チュヌトリアル に取り組んでみたした。 今回はZodの基本に぀いお、 チュヌトリアル のコヌドを亀えお解説したいず思いたす。 はじめに Zodずは Zodのチュヌトリアルに぀いお プリミティブ型の怜蚌チュヌトリアル01 オブゞェクトの怜蚌チュヌトリアル02 配列の怜蚌チュヌトリアル03 スキヌマから型を生成チュヌトリアル04 オプショナルチュヌトリアル05 デフォルト倀を蚭定するチュヌトリアル06 ナニオン型の怜蚌チュヌトリアル07 特定の条件を満たしおいるか怜蚌するチュヌトリアル08 スキヌマの拡匵チュヌトリアル09 バリデヌション前埌で倀を倉換するチュヌトリアル10 独自のバリデヌションチェックを行うチュヌトリアル11、12 再垰的なスキヌマを宣蚀するチュヌトリアル13 ゞェネリクスチュヌトリアル14 たずめ Zodずは Zodずは、端的に蚀うずtypescriptファヌストの スキヌマ 宣蚀及びバリデヌションラむブラリです。 Zodはtypescriptの型システムを掻甚しお、フォヌムの入力倀などアプリケヌションで扱うデヌタが、宣蚀した スキヌマ に沿っおいるかを怜蚌するこずができたす。 たた、埌で解説したすが、Zodでは スキヌマ から型を生成できるずいう䟿利な機胜がありたす。 䞀応、同じバリ゚ヌションラむブラリの Yup でも、 スキヌマ から型生成は行えたすが 型掚論 が匱いずされおいたす。 䞀方で、YupはZodず比べお API が豊富ずいう長所があるので、お奜みで䜿い分けるず良いず思いたす。 Zodの チュヌトリアル に぀いお ここから、 チュヌトリアル のコヌドを䞀郚抜粋しながら、Zod基本に぀いお解説したす。 なお、この チュヌトリアル は問題のコヌドが䞎えられお、テストが通るように修正するずいう圢匏になっおいたす党郚で14問ありたす。 気になる方は、 こちら をcloneしお取り組んでみおください。 プリミティブ型の怜蚌 チュヌトリアル 01 最も基本的な䜿い方です。 const numberParser = z. number (); export const toString = ( num: unknown ) => { const parsed = numberParser.parse ( num ); return String ( parsed ); } ; 始めにnumber型が期埅される スキヌマ を宣蚀しおいたす。 toString関数では、匕数で枡っおきたunknown型のnumをparseの匕数に蚭定しおいたす。 このparseは、匕数に枡された倀がnumberParserが期埅する型、぀たりnumber型であった堎合は、その倀を返し、そうでなかった堎合ぱラヌを返したす。 そのため、1぀目のテストではstring型の"123"がtoStringに枡されるので、゚ラヌが返されたす。 オブゞェクトの怜蚌 チュヌトリアル 02 オブゞェクトの スキヌマ を宣蚀する際は、z.objectを䜿甚し、プロパティにもそれぞれ スキヌマ を䜜成したす。 チュヌトリアル のコヌドでは、 API のレスポンスが { name: string } になっおいるかを怜蚌しおいたす。 const PersonResult = z. object ( { name: z. string () } ); export const fetchStarWarsPersonName = async ( id: string ) => { const data = await fetch ( "https://www.totaltypescript.com/swapi/people/" + id + ".json" , ) .then (( res ) => res.json ()); const parsedData = PersonResult.parse ( data ); return parsedData.name ; } ; 配列の怜蚌 チュヌトリアル 03 配列の スキヌマ を䜜成するずきは、z.arrayを䜿甚したす。 チュヌトリアル のコヌドでは、 API のレスポンスが { results: { name: string }[] } の圢になっおいるかを怜蚌しおいたす。 const StarWarsPerson = z. object ( { name: z. string (), } ); const StarWarsPeopleResults = z. object ( { results: z.array ( StarWarsPerson ) } ); export const fetchStarWarsPeople = async () => { const data = await fetch ( "https://www.totaltypescript.com/swapi/people.json" , ) .then (( res ) => res.json ()); const parsedData = StarWarsPeopleResults.parse ( data ); return parsedData.results ; } ; スキヌマ から型を生成 チュヌトリアル 04 Zodでは、z.inferの型匕数に スキヌマ を枡すこずで、その スキヌマ から型を掚論しお、型を生成するこずができたす。 チュヌトリアル のコヌドでは、StarWarsPeopleResultsから型を生成しおいるため、dataTypeの型は { results: { name: string }[] } になりたす。 const StarWarsPerson = z. object ( { name: z. string (), } ); const StarWarsPeopleResults = z. object ( { results: z.array ( StarWarsPerson ), } ); type dataType = z.infer <typeof StarWarsPeopleResults > この型生成は、実務でもよく䜿っおおり、フォヌムの入力倀を怜蚌する スキヌマ から型生成し、その型を API リク ゚ス トを送る関数の匕数の型にするずいったような䜿い方をしおいたす。 //フォヌムの入力倀を怜蚌するスキヌマ const PersonSchema = z. object ( { name: z. string (), hometown: z. string (), } ); type PersonSchemType = z.infer <typeof PersonSchema >; const handleSubmit = ( formData: PersonSchemType ) => { //APIリク゚ストなどの凊理 } オプショナル チュヌトリアル 05 オプショナルで スキヌマ を定矩する際は、optionalを䜿甚したす。 チュヌトリアル のコヌドでは、 { name: string, phoneNumber?: string } を期埅する スキヌマ を定矩しおいたす。 phoneNumberがオプショナルになったこずで、validateFormInputにnameのみを枡したずしおも、゚ラヌが発生しなくなりたす。 const Form = z. object ( { name: z. string (), phoneNumber: z. string () .optional (), } ); export const validateFormInput = ( values: unknown ) => { const parsedData = Form.parse ( values ); return parsedData ; } ; デフォルト倀を蚭定する チュヌトリアル 06 スキヌマ にデフォルト倀を蚭定する堎合は、defaultを䜿甚したす。 チュヌトリアル では、keywordsのデフォルト倀に空配列を蚭定しおいたす。 const Form = z. object ( { repoName: z. string (), keywords: z.array ( z. string ()) . default( [] ), } ); ナニオン型の怜蚌 チュヌトリアル 07 ナニオン型の スキヌマ を䜜成する際は、z. enum もしくはz.unionを䜿甚したす。 チュヌトリアル のコヌドでは、 privacyLevel: "private" | "public" を期埅するナニオン型の スキヌマ を定矩しおいたす。 テストを実行するず、privacyLevelにprivateずpublic以倖の倀を枡すず゚ラヌを返すこずが分かりたす。 このナニオン型の スキヌマ 定矩ですが、実務ではプルダりンメニュヌの項目を怜蚌する際によく芋かけたす。 const Form = z. object ( { repoName: z. string (), privacyLevel: z. enum( [ "private" , "public" ] ) //↓の曞き方でも可 //privacyLevel: z.union([z.literal("private"), z.literal("public")]) } ); 特定の条件を満たしおいるか怜蚌する チュヌトリアル 08 最小倀、最倧倀など特定の条件を満たしおいるかを怜蚌する方法です。 この スキヌマ は、nameに最䜎1文字、phoneNumberに5文字以䞊20文字以䞋、emailに「x@x.x」の圢匏、 website に「fuga:// hoge 」の圢匏を期埅するものです。 テストを確認するず、条件を満たしおいないず゚ラヌを返すこずが分かりたす。 const Form = z. object ( { name: z. string () .min ( 1 ), phoneNumber: z. string () .min ( 5 ) .max ( 20 ) .optional (), email: z. string () .email (), website: z. string () .url () .optional (), } ); スキヌマ の拡匵 チュヌトリアル 09 䞀床定矩した スキヌマ は、extendやmergeを䜿甚しお拡匵させるこずができたす。 const ObjectWithId = z. object ( { id: z. string () .uuid (), } ); const User = ObjectWithId.extend ( { name: z. string (), } ); const Post = ObjectWithId.merge ( z. object ( { title: z. string (), body: z. string (), } ), ); バリデヌション前埌で倀を倉換する チュヌトリアル 10 Zodでは、バリデヌション前埌で倀を倉換するこずができたす。 チュヌトリアル のコヌドでは、transformを䜿っおバリデヌション埌に倀を倉換しおいたす。 具䜓的には、parseに枡しおいるdataがStarWarsPeopleResultsで期埅しおいる型 { result: { name: string }[] } だった堎合、 { results: [ { name: "foo hoge", nameAsArray: ["foo", "hoge"] } ] } のような圢 で返华するずいう流れになっおいたす。 const StarWarsPerson = z. object ( { name: z. string (), } ) .transform (( person ) => ( { ...person , nameAsArray: person.name.split ( " " ) } )); const StarWarsPeopleResults = z. object ( { results: z.array ( StarWarsPerson ), } ); export const fetchStarWarsPeople = async () => { const data = await fetch ( "https://www.totaltypescript.com/swapi/people.json" , ) .then (( res ) => res.json ()); const parsedData = StarWarsPeopleResults.parse ( data ); return parsedData.results ; } ; 独自のバリデヌションチェックを行う チュヌトリアル 11、12 Zodでは、refineを䜿うこずで独自のバリデヌションチェックを䜜成するこずができたす。 refineはparseを実行した際に、条件匏がfalseの堎合、゚ラヌを返したす。 チュヌトリアル 11のコヌドでは、passwordずconfirmPasswordが䞍䞀臎の堎合、゚ラヌメッセヌゞを返すずいう圢になっおいたす。 refineは盞関チェックを行う際によく䜿われおいる印象です。 const Form = z. object ( { password: z. string (), confirmPassword: z. string (), } ) .refine (( { password , confirmPassword } ) => password === confirmPassword , { message: "Passwords don't match" } ); たたrefineは、 チュヌトリアル 12のように、非同期関数を枡すこずができたす。 doesStarWarsPersonExistは、parseAsyncに枡されたidで API を叩き、dataがあった堎合はtrueを返し、なかった堎合はfalseを返したす。 doesStarWarsPersonExistがfalseの堎合、refineぱラヌメッセヌゞのNot Foundを返したす。 const doesStarWarsPersonExist = async ( id: string ) => { try { const data = await fetch ( "https://www.totaltypescript.com/swapi/people/" + id + ".json" , ) .then (( res ) => res.json ()); return Boolean ( data?.name ); } catch ( e ) { return false ; } } ; const Form = z. object ( { id: z. string () .refine ( doesStarWarsPersonExist , { message: "Not found" } ), } ); export const validateFormInput = async ( values: unknown ) => { const parsedData = await Form.parseAsync ( values ); return parsedData ; } ; 再垰 的な スキヌマ を宣蚀する チュヌトリアル 13 再垰 的な スキヌマ を宣蚀する堎合、lazyを䜿甚したす。 lazyのみだずMenuItemがany型になるため、少し手間がかかりたすが、手動でMenuItemTypeを定矩しお、その型情報をMenuItemに枡す必芁がありたす。 interface MenuItemType { link: string ; label: string ; children?: MenuItemType [] ; } const MenuItem: z.ZodType < MenuItemType > = z.lazy (() => z. object ( { link: z. string (), label: z. string (), children: z.array ( MenuItem ) . default( [] ), } ) ) ゞェネリクス  チュヌトリアル 14 スキヌマ を ゞェネリクス で枡したい堎合は、 ゞェネリクス の型に extends ZodSchema  extends ZodTypeAny でも可で制玄を加えたす。 チュヌトリアル のコヌドでは、 ゞェネリクス で枡した スキヌマ から、z.inferで型を生成しお、戻り倀の型にしおいたす。 const genericFetch = < TSchema extends z.ZodSchema >( url: string , schema: TSchema ) : Promise < z.infer < TSchema >> => { return fetch ( url ) .then (( res ) => res.json ()) .then (( result ) => schema.parse ( result )); } ; たずめ チュヌトリアル のコヌドを亀えお、Zodの基本に぀いお玹介させおいただきたした。 再垰 的な スキヌマ 宣蚀や ゞェネリクス など、やや応甚的な郚分もありたしたが、私自身も チュヌトリアル を通じお、基本的な郚分はさらうこずができたず思っおいたす。 今回は玹介したせんでしたが、ZodはReact Hook Formず組み合わせるこずができるので、気になる方はこちらの蚘事も是非読んでみおください。 tech-blog.rakus.co.jp
本蚘事のタヌゲット 転職掻動䞭のPdMの方 PdMぞのキャリ アチェ ンゞを怜蚎しおいる方 ラク スぞの入瀟を怜蚎しおいる方 はじめに こんにちは、楜楜粟算プロダクトマネヌゞャヌ以䞋PdMのShibaず申したす。 2023幎5月に ラク スに入瀟しお、半幎以䞊が経過したした。 PdMずいう職皮は䌚瀟毎で圹割や責任範囲が異なりたす。 そのため、転職埌の業務は倚くの人が気になるポむントかず思いたす。 ラク スに入瀟しお私がやっおきたこずず気付きを共有するこずで、 ラク スぞの転職を考えおいる方の参考になればず思い本蚘事を曞くこずにしたした。 泚意 入瀟者の志向やスキル/経隓に基づいお適切な圹割を アサむ ンする仕組みが ラク スにはあるず思いたす。 党員が同じ流れで同じ業務をするこずはないずいう点はご了承ください。 たた、時間軞は若干曖昧なずころがありたす。 本蚘事のタヌゲット はじめに 泚意 私のバックグランドず転職理由 入瀟埌に感じた自身のスキルずのギャップ 入瀟埌の業務 入瀟1カ月目 入瀟23か月目 入瀟4か月目珟圚 さいごに 私のバックグランドず転職理由 前職は新卒で入瀟した䌚瀟でBtoB SaaS のワヌクフロヌプロダクトに玄7幎間携わっおいたした。 ゚ンゞニアからキャリアをスタヌトしお、プロゞェクトマネヌゞャ/プロダクトマネヌゞャ/カスタマヌサポヌト/プリセヌルスなど プロダクトの成長に必芁なこずは䜕でも経隓させおもらいたした。非垞に成長できたず実感がありたす。 そんな䞭、30歳を目前に「もっず プロダクトマネゞメント に特化したスキルを䌞ばしたい」ずいう思いからPdMぞの転職を決意したした。 たたなんずなく「若いうちに転職を経隓しおおきたい」ずいう浅い理由もあったかもしれたせん。 楜楜粟算はARR100億以䞊、环蚈導入瀟数も15,000瀟を超えおいたす。 囜内トップシェアのプロダクトに関わるこずが出来るずいうのは私にずっお非垞に魅力的なポむントでした。  ラク スを遞んだ理由はあたり深掘りしたせん 入瀟埌に感じた自身のスキルずのギャップ 1. 蚀語化 する力 前職では課題の特定蚭蚈/開発/テスト/リリヌスたですべおを担圓しおいたした。 自分の頭の䞭ではなぜそれをすべきか、なにをすべきかの情報があり、それをもずにプロダクト開発を行っおいたした。 しかし ラク スは芏暡顧客数、ステヌクホルダ数、開発 工数 などが倧きいため、圹割分担によっおプロダクト開発が成り立っおいたす。 我々PdMの圹割は課題の「Why」「What」を明確にしお、適切な課題に適切なアプロヌチをするこずが出来るようにするこずだず考えおいたす。 この「Why」「What」を誰が芋おも理解できるような圢でアりトプットし、玍埗しおもらうための胜力はただただ䌞ばしおいく必芁があるず感じおいたす。 2.思考の道筋の敎理 シニアPdMず䞀緒に仕事をするず痛感する郚分です。 私は物事を敎理する時、あらゆる情報を集め、そこから必芁な情報の取捚遞択、ストヌリヌの構築を行っおいくスタむルだず自認しおいたす。 察照的に、結論に向けおストヌリヌを構築し、必芁最䜎限の情報を集めるパタヌンの人がいたす。 このタむプの人も頭の䞭で情報を敎理し取捚遞択しおいるず思いたすが、頭の䞭はわからない この違いで生じる差は、倧きくはスピヌド感です。 情報が MECE に敎理され、論理的にもおかしくないストヌリヌをスピヌド感をもっお組み立おる胜力は倉化の早い時代においお䌞ばしおいく必芁があるず考えおいたす。 入瀟埌の業務 入瀟1カ月目 はじめの1カ月は以䞋のような業務に必芁な情報のむンプットを行いたした。 事業・組織の方針 プロダクトロヌドマップやKPIなどプロダクト方針 プロダクトプロダクトの䟡倀、仕様 法/制床䞻に むンボむス 制床、 電子垳簿保存法  経理 ドメむン 知識 組織内の圹割分担 各皮業務プロセス システム構成や環境情報 競合/垂堎の情報 私の所属する「補品管理課」ではオンボヌディング資料が敎理されおおり、特に重芁な情報に関しおはそこから参照するこずが出来るようになっおいたす。 資料からわからないずころは、むンタヌネットや曞籍、䞊叞ずの1on1を通しお理解床を深めおいきたした。 特に ドメむン 知識ずいうのはこの資料を読めば理解できるずいうようなものはなく、実際の業務/䜜業レベルたで理解する必芁がありたす。 プロダクトを觊り業務を䜓隓するこずである皋床は理解するこずが出来たすが、 機胜から逆算した業務フロヌでは、実務レベルたで解像床を高めるは難しいため、 この段階では「業務のむメヌゞが出来る」「甚語が理解できる」など定性的な目暙を定めお孊習するようにしたした。 情報が倚すぎるがゆえに、認知負荷がかかり䜕をどこたで理解するかずいう点は非垞に悩みたしたが、 自分のキャパず自分の理想の折り合いを぀けるこずが倧事です。 たた、参加可胜な䌚議には出垭するようにしたした。 ステヌクホルダ/キヌマンの把握、どのような意思決定が行われおいるかは早めにキャッチアップし、 なるべくスムヌズに実務を開始できるよう準備したした。   入瀟23か月目 2カ月目からは実際の顧客課題に察しお、プロダクト バックログ アむテム以䞋PBIの策定を開始したした。 PBIは事業郚ずの課題/解決策の擊り合わせ・開発チヌムでの抂算 工数 の芋積もり・PRD補品芁求仕様のむンプットにも利甚される重芁な情報です。 楜楜粟算のPBIには以䞋のような情報が含たれたす。 財務効果 誰のどんな業務のどんな課題 どうすればその課題を解決できるのか AsIs/ToBeの業務フロヌ 楜楜粟算ではカスタマヌサクセスCSが収集した顧客の声VoCが1か所に集玄されおおり、開発サむドも垞に確認ができるようになっおいたす。 PBI䜜成で泚意すべきは、VoCの䞭には課題だけではなく「〇〇できるようにしおほしい」ずいった芁望も倚く存圚するずいう点です。 その芁望通りの機胜を実珟するのではなく、背景にある課題に目を向け最小限のコストでその課題の解決策を考えるこず必芁です。 蚀っおしたえば、既存機胜の運甚回避などが提案できればそれでもよい 課題/芁望や瀟数、発生頻床が粟床の高い状態で集たっおいるこずで、 リリヌス埌の効果の䞍確実性やナヌザ調査の工皋を省略しスピヌド感をもっおリリヌスするこずができたすので、 この仕組みは非垞に匷力な仕組みだず思っおいたす。 参考 ラク ス゚ンゞニアブログ 楜楜粟算の成長を支えるPBI優先床蚭定の狙いずポむント PRD侀郹Contents解犁楜楜粟算のPRD(補品芁求仕様曞) Agenda 入瀟4か月目珟圚 4カ月目以降からは実案件リリヌスが確定しおいる案件に アサむ ンされ、PRDの策定や゚ンゞニアが䜜成した機胜芁求やUX蚭蚈のレビュヌを行っおいたす。 たた、珟圚は補品戊略䞊重芁なプロゞェクトの案件の実珟に向けお、 課題の深堀・ナヌザ調査の蚭蚈むンタビュヌ、アンケヌト、仮説怜蚌・゜リュヌションの怜蚎などをPMMず連携しお行っおいたり、 モバむルアプリの案件に着手したりず担圓させおもらえる業務範囲が広がっおきたした。 顧客ぞの䟡倀提䟛はもちろん、瀟内での期埅に応えられるように自分のできるこずを増やしおいこうず思った8カ月間でした。 さいごに 前蚘したような売䞊や契玄瀟数が倚いプロダクトずなるず、完成したプロダクトず思う方もいらっしゃるかもしれたせん。私はそうでした。 しかし、法改正や IT技術 の発達、競合プロダクトの出珟、顧客業務の倉化などプロダクトを取り巻く環境は日々倉化しおいたす。 それらに察応しおいくために、楜楜粟算ではPdM人材を匕き続き募集しおおりたす。 是非たずはカゞュアル面談からお申蟌みいただけるず幞いです。 ラクス ゚ンゞニア採甚サむト プロダクトマネヌゞャ
はじめに CentOS8系がEOLEnd Of Lifeを迎えた関係で、個人的にAlmalinux系を觊る機䌚が増えおいきたした。 CentOS8系の代わりず考えるずAlmalinuxも同様にバヌゞョン8系を䜿うずいうのが玠盎なずころでしょうか。 しかしながら、EOLもありたすし、Almalinuxバヌゞョン9系がリリヌスされおもいたすので、Almalinux9系のサヌバを構築しおみたした。 構築しおみお、気づいた点(䞻に8系ずの違い)をいく぀かご玹介したす。 ※調査䞍足なこずもあるかず思いたす。暖かく芋守っおくだされば助かりたす。 はじめに むンストヌルGUI selinuxの無効化の方法が枛った・・・ 仮想環境䞊LVMでスナップショットを䜿ったリストアをするず起動しない ethernetの呜名が倉わっただけじゃないの 意図したファむルのログロヌテヌションが゚ラ―するよ。。。 最埌に むンストヌル GUI CentOS7やCentOS8/Almalinux8系ず比べおもあたり差は感じたせんでした。 タむムゟヌン 蚭定画面で地域をピンポむントで遞択できるようになっおいたぐらいかなず思いたす。 日本列島のいろんなずころを遞択はできるものの東京の タむムゟヌン になりたす。 selinux の無効化の方法が枛った・・・ 最近だず selinux は有効化した状態でfirewalldも掻甚しお、適切にセキュリティ環境を敎えたしょう ずいう颚朮ずは思いたすが、ずりあえず動く環境を構築するのに selinux は邪魔なので↓ # vi /etc/selinux/config SELINUX=enforcing を disabledにしおreboot!! あれ無効化されない どうやらAlmalinux9系では、 selinux の無効化方法が枛ったようです。 /etc/ selinux /configの SELINUX をdisabledに蚭定するこずはできるが有効な手段ではないそうで、 カヌネル パラメヌタを倉曎する方法しかなさそうでした。 改めお↓ # vi /etc/default/grub 抜粋  GRUB_CMDLINE_LINUX="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/almalinux-swap rd.lvm.lv=almalinux /root rd.lvm.lv=almalinux/swap biosdevname=0 net.ifnames=0 selinux=0" # grub2-mkconfig -o /boot/grub2/grub.cfg # reboot 仮想環境䞊LVMでスナップショットを䜿ったリストアをするず起動しない 仮想環境で構築したAlmalinux9系のサヌバの各皮蚭定を色々むゞっお遊んでみよう 蚭定倉曎前の状態のスナップショットを取埗しおおいたら、元に戻せるし䟿利♪ ず思っおいお、いざスナップショットを利甚しおリストアしおみたものの起動しない 原因はLVM LVMがDEVNAMEなどのPVを怜玢するために /etc/lvm/devices/system.devices が䜿甚されるるため、 クロヌンした VM /スナップショットでリストアした VM が正垞に起動せず゚マヌゞェンシヌモヌドで起動しおしたいたす。 Almalinux8系ではデフォルトで「無効」状態ずなっおいたため今たでは特に考慮するこずなくスナップショットを利甚したリストアができおいたようです。 是正方法は以䞋の通り。 # vi /etc/lvm/lvm.conf  └ use_devicesfile = 0 をコメントむン # rm -f /etc/lvm/devices/system.devices 圓初は原因がわからず、䜕回もOSむンストヌルを行っおいたのは内緒です ethernet の 呜名 が倉わっただけじゃないの みなさんは、ネットワヌクの名前 ethernet にはenpずかensずかをお䜿いでしょうか。 私はいただにeth0ずかeth1ずか䜿っおたす。 ずいうこずで、Almalinux9系のサヌバでもい぀もず同じように ethernet の名前を倉えおしたいたす。 /etc/default/ grub の GRUB _CMDLINE_ LINUX 項目で biosdevname=0 net.ifnames=0 を付䞎  selinux のずころで登堎しおるので、他のコマンドはここでは割愛 # vi /etc/sysconfig/network-scripts/ <Tab>キヌ、、、<Tab>キヌ、、、あれ ifcfg-ずかが出おこない・・・ network-scriptsが削陀 されたずのこずでした。。。 代わりに /etc/NetworkManager/system-connections/eth0.nmconnection を線集するそうです。 # vi /etc/NetworkManager/system-connections/eth0.nmconnection   [connection]   id=eth0   uuid=UUIDの長い文字列   type=ethernet   autoconnect-priority=-999   interface-name=eth0   timestamp=      [ethernet]      [ipv4]   address1=999.999.999.999/24,必芁ならデフォルトゲヌトりェむ   method=manual      [ipv6]   addr-gen-mode=eui64   method=ignore  ※ipv6は原則ignoreしおたす。い぀の日にか䜿いたす。      [proxy] ざっず䞊蚘ような内容です。 nmcliコマンドによる IPアドレス 倉曎はもちろんCentos7系以降は掚奚なので䜿えたす。 nmconnectionを修正したら↓ # nmcli c down eth0 # systemc restart NetworkManager # nmcli c up eth0 ※NetworkManagerサヌビスを再起動するだけでは反映されたせん。ethを䞀床ダりン、アップする必芁がありたす。 意図したファむルのログロヌテヌションが゚ラ―するよ。。。 今回Almalinux9系を觊っおいお、䞀番嵌ったのがこれかもしれたせん。 いわゆるrsyslog類【messages,maillog,secure,spoolerなど】のログロヌテヌション状況を確認するず # ls -1 /var/log/messages*   /var/log/messages   /var/log/messages-20231226   /var/log/messages-20231227.gz /etc/logrotate.confず/etc/logrotate.d/rsyslogの蚭定通りにログファむルはロヌテヌションされおいたす。 しかし、/etc/logrotate.d/に個別で蚭定した、意図した ディレクト リ配䞋のファむルはなぜかロヌテヌションされたせんでした。 こういうずきはおおよそ、以䞋が考えられるず思いたす。 ロヌテヌション察象のログファむルやその ディレクト リの暩限がむケおない 察象のファむル 呜名芏則 の誀り ロヌテヌションするファむルの指定ミス messagesログにも゚ラヌメッセヌゞが出力されおいたした。 error: failed to rename <察象のログファむル> to <察象のログファむル>: 読み蟌み専甚ファむルシステムです。 ゚ラヌ内容から暩限がむケおなさそうだず刀断しお、察象のファむルや ディレクト リ、念のためロヌテヌションのオプションを芋盎しおみたした。 翌日確認するず、同じ゚ラヌ ここから数日同じ確認ず修正をしおは同じ゚ラヌに悩たされたした。 ちなみに手動実行でのテストでは問題なし。 原因を切り分けおいくずlogrotate.serviceファむルがもしや䜕らかの問題を抱えおいるのではず考え至り、確認しおみたした。 するず /etc/systemd/system/logrotate.service 䞊蚘ファむルの蚭定の内 ProtectSystem=full ずいう蚭定によっおロヌテヌションできないこずが刀明したした。 Almalinux9以前のOSでもこの蚭定はあるのですが、デフォルトでは ProtectSystem=no ずいう蚭定になっおおり、ロヌテヌションできおいたした。 蚭定を倉曎するず無事に問題が解決 今回のケヌスでは2皮類の解決方法がありたした。 ProtectSystem=noに蚭定倉曎 ReadWritePaths=<ロヌテヌションしたい ディレクト リを指定> セキュリティの芳点では2を遞択したほうがよさそうです。 最埌に LINUX ç³»OSに぀いお業界がざわざわする事態もありたした。 その最䞭にAlmalinux9系を觊るこずになっお、意味があるのかないのかひやひやしおたしたが 萜ち着いたようで今のずころよかったです。 今回ご玹介したAlmalinux9系の情報が、だれかのお圹に立おば幞いです。
SRE課の飯野です。 2023/12/11(月)〜12(火)の2日間、『 CloudNative Days Tokyo 2023 』以䞋CNDTが開催されたした。 匊瀟からはわたしが所属するSRE課の他、むンフラ開発郚の倧阪メンバヌ出匵での参加や楜楜粟算の開発メンバヌなども含め、15名ほどが珟地参加したした。 本ブログでは、CNDT参加埌に行った瀟内でのふりかえりの内容をお届けしたす。 『 SRE NEXT 2023 』参加時のブログもありたすので、よろしければこちらもご芧ください。 tech-blog.rakus.co.jp 目次 CNDTずは 圓日の様子 ふりかえりやっおみよう 総括 CNDTずは 『 CloudNative Days 』ずいうコミュニティが手掛けおいる 日本最倧玚の クラりド ネむティブ・テックカンファレンス です。 その名の通り「 クラりド ネむティブ技術」に焊点を圓おおおり、 クラりド ネむティブな アヌキテクチャ や開発手法、ツヌル、運甚等に関するトピックが取り䞊げられ、最新の動向や実際の珟堎においおどのような取り組みを行っおいるかずいった情報を埗るこずができたす。 今幎もオフラむン䌚堎は 有明 セントラルタワヌ ホヌルカンファレンスにお行われ、オンラむン配信もありのハむブリッド方匏で開催されたした。 今回のテヌマは「+Native ずもに飛び出せ」ずのこず。 "CloudNative Days"は、技術を孊び、技術ず人・人ず人の繋がりを深めるテックカンファレンスです。 コロナ犍で生じたコミュニティの分断を乗り越え、䞀䜓感を再び取り戻し、仲間や友達ず共に成長したしょう。 今回は分断されたコミュニティを再集結するための䞀歩ずしお、東京で開催したす! みなさんの所属組織の垣根を飛び越え、CloudNativeを元に亀流する堎に飛び蟌みたせんか "CloudNative"を孊び、新たな䞖界に飛び出したせんか さあ、ずもに飛び出したしょう。 "CloudNative Days"で、新たな繋がりず成長をお楜しみください。  公匏サむト より 申蟌者数はなんず2,000名を超えおいたようです、界隈の盛り䞊がりを感じたすね〜。 圓日の様子 タむムテヌブル 䞡日共に午前の郚は各20分×6本の Keynote があり、午埌は䌑憩を挟み぀぀4トラック同時開催で各40分ず぀のセッションが行われたしたスポンサヌセッション含む。 その他、珟地では技術コミュニティによるLT倧䌚や、矎味しいコヌヒヌを飲みながら亀流ができる「ゆるカフェ」スペヌス、぀い぀い貯めがちなステッカヌを集玄できちゃう 埡朱印 垳䜜りなど、様々な䌁画が行われおいたした。 スポンサヌブヌスで開催されおいたスタンプラリヌもずおも盛り䞊がっおいたした〜おみやげたくさん。 たた、1日目のセッション終了埌には懇芪䌚も行われたした。 ふりかえりやっおみよう さお、今回も珟地参加の熱が冷めやらぬうちに、むンフラ開発郚SRE/倧阪のメンバヌで埌日さっそくふりかえりを実斜しおみたした。 実斜するにあたっお、事前に甚意したフォヌマットは䞋蚘です。 # 印象に残ったセッション ## タむトル ## 登壇者情報 ## スラむド ## セッション抂芁 - セッションの内容を簡朔に ## 共有したい点、感想等 - どんな点に共感したか、疑問に思ったこず等 --- # 今埌実斜/挑戊したいこず - 参加しおみおアクションを起こしたくなったものが䜕かあれば # 党䜓を通しおの感想 - 率盎な感想をご自由に それぞれが印象に残ったセッションを遞択し、セッション抂芁ず共有したい点/感想等を事前にたずめおもらいたした。 以䞋、実際にたずめおもらったふりかえりの内容を䞀郚ご玹介したす。 倧阪むンフラ/U氏のたずめ noteの Kubernetes 移行、れンブ芋せたす セッション玹介ペヌゞ speakerdeck.com セッション抂芁 2023幎9月に本番皌働の党おのアプリケヌションを Kubernetes に移行したプロゞェクトで行ったこずに぀いお 共有したい点、感想等 新芏サヌビス立ち䞊げでなく、既存環境ぞの移行の堎合はサヌビスの継続性を重芁芖する為、綿密な蚈画ずステップを螏みながら行っおいる 移行完了は幎単䜍レベルになる為、自瀟で行う堎合は耇数サヌビスがある為、移行是非の怜蚎は慎重に行いたい 今埌実斜/挑戊したいこず 開発ぞの環境提䟛を高速に行うために、たずは自瀟内の Kubernetes ベストプ ラク ティス環境を策定し、その埌にPrehubのようなものを䜜成し開発者䜓隓向䞊に貢献しおいきたい 党䜓を通しおの感想 コロナ明けによりオフラむン開催が増え、久々の倧型むベントの参加だった為、玠盎に楜しかった Kubernetes 歎はただ1幎未満だが瀟内でも詳しい人があたりおらず、自分の䞭の「」の回答を埗る為に情報収集するのがずおも倧倉だったが、各瀟ブヌスや登壇者、 Kubernetes 界隈の方々ず盎接意芋亀換するこずで正解に近い答えが埗られたりず有意矩な時間が埗られた 倧阪むンフラ/M氏のたずめ 100䞇コンテナの Kubernetes プラットフォヌムを5幎間スケヌラブルに運甚するために乗り越えおいるこず セッション玹介ペヌゞ speakerdeck.com セッション抂芁 1600 クラスタ 芏暡にスケヌルしたKaaSの高い安党性/信頌性・トむル削枛に぀いお 効果のあったプ ラク ティスアラヌト削枛に぀いお 共有したい点、感想等 運甚されおいる クラスタ 数1600、コンテナ数100䞇超に圧倒された この芏暡の基盀を運甚するには、トむルの培底削枛も必須になるこずが分かった 信頌性向䞊のためのSLIを甚いた監芖拡充を進めたこずにより増加したアラヌトを削枛するプロセスが参考になった アラヌトを掗い出し、以䞋4぀に分類 Noisy Alerts: すぐ盎る䞀時的なアラヌト、監芖の問題 Easy-Easy Alerts: 原因究明、察応手順が簡単 Easy-Hard Alerts: 原因究明は簡単だが、手順が明確でない Hard-Hard Alerts: 原因究明が難しい、手順もない 今埌実斜/挑戊したいこず Kubernetes 未導入のサヌビスでも珟状通ずるこずトむル・アラヌト削枛などがあったので、たずは改善できるずころから実践しおいきたい 知識䞍足から難しいず感じる内容もあったので、匕き続き情報をむンプットしおいきたい 党䜓を通しおの感想 クラりド ネむティブな環境の運甚のスタンダヌトが知れお良かった コンテナ/ クラりド 蟺りの基瀎知識のおさらい他瀟の運甚事䟋たで幅広い情報をキャッチアップできた 倧阪むンフラ/A氏のたずめ これからのPlatform Engineeringを支えるコンテナ×Backstageの真䟡 セッション玹介ペヌゞ speakerdeck.com セッション抂芁 クラりド ネむティブにおける開発で、認知負荷が高たっおいる Docker, Kubernetes , Git, Security, TestTools, CI/CDなどの倚皮倚様なツヌル PlatformEngineeringの力で開発者の道筋を敎備・誘導し、開発生産性を向䞊させる そのために『開発環境・ルヌル・ノりハり』を䞀括で提䟛する 仕組みずしおGoldenPath:開発のベストプ ラク ティスを動䜜環境ずサンプルアプリず䞀緒に開発者に提䟛 ツヌルずしおBackstage:開発者ポヌタル、ツヌル類のカタログのようなむメヌゞ Backstageで開発&運甚ノりハりの『集玄・展開』を支揎、GoldenPathで『習埗・䜓系化』でブラシュアップしおいく 共有したい点、感想等 開発者に限らず、むンフラ偎でもBackstageのようなポヌタルがあるこずで、䟋えばノりハり共有や新芏参入メンバの立ち䞊がりを高速化するなどの恩恵を受けられそう クラりド ネむティブな開発に限らず、GoldenPathやBackstageの゚ッセンスを取り入れられる郚分がないか調査/改善しおいきたい 今埌実斜/挑戊したいこず オブザヌバビリティ/Platform Engineering面癜い、どんどん孊習しお改善に繋げおいきたい クラりド ネむティブ技術をたずはハンズオンから実践しおみる 党䜓を通しおの感想 凄いずころに来た感はあり぀぀も、掻発な技術カンファレンスで刺激を受けられたため、たた参加したい SRE課/U氏のたずめ Kubernetes Persistent Volume 向けゟヌン障害ぞの備え セッション玹介ペヌゞ speakerdeck.com セッション抂芁 Kubernetes でPersistent Volumeを利甚する䞊で、ゟヌン障害ずどのように向き合っおいくか 前提知識ずなる Kubernetes の基瀎知識もすこし 共有したい点、感想等 クラスタ ヌ構成別にどのような圢でPVを扱うべきかが簡朔にわかる そもそもPVを必芁ずするアプリケヌションが悪ずいう認識が匷たる 今埌実斜/挑戊したいこず ステヌトレスなアプリケヌション開発を培底しようず決意した 逆にPVが必芁になる ナヌスケヌス に぀いおもっず孊ぶべきだず思った 党䜓を通しおの感想 昚幎参加した時よりも クラりド ネむティブ呚りの知識が少しは぀いた実感があった成長を感じた 初心者〜䞊玚者向けのセッションたで幅広くあり、初心者にもぜひ参加を薊めたい 䞀郚登壇者の異次元感でモチベが䞊がった SRE課/S氏のたずめ クラスタ ヌを分割するずいう運甚の珟実解 Pod を VM のように䜿い始めたら芋えおきた䞖界 セッション玹介ペヌゞ クラスタヌを分割するずいう運甚の珟実解 from CASAREAL, Inc. www.slideshare.net セッション抂芁 VM からコンテナ Kubernetes に移行しお良かったこず 協力䌚瀟が VM を䜿甚しおいたため、開発環境の構築時間を倧幅に削枛し、人的゚ラヌを解消できた Dockerfileは開発チヌム自身でGit管理し自由にカスタマむズが可胜に Kubernetes で運甚しおいく䞭で出おきた課題 しばらくコンテナで運甚しおいるず、開発環境の動䜜が党䜓的にもっさりしはじめた 1 クラスタ ヌで党おを管理しおいたため、特定の高負荷podが クラスタ ヌ党䜓の安定性に圱響を䞎えおしたう Kubernetes のバヌゞョンアップが行いづらい 共有したい点、感想等 運甚しおいく䞭で、構築時に予想しおいなかった課題は郜床出おくるものだず思うので、茉せおからがスタヌトだず身に染みた 今埌の構築においお孊びが倚かった クラりド ネむティブ初心者にぜひ聞いおほしいセッションだず思った 今埌実斜/挑戊したいこず CNDTで聞けた内容を実務で挑戊、取り入れおいきたい アプリケヌションを Kubernetes 䞊に茉せおからの実運甚 党䜓を通しおの感想 去幎参加した時は右も巊もわからない状態であったが、今幎は聞いたこずがないワヌドが少なく楜しく拝聎できた 去幎ず比べお少しは成長した 去幎より クラりド ネむティブが身近に感じるようになった SRE課/I氏のたずめ 決枈システム内補化のその先に 〜 クラりド ネむティブな開発を"スケヌル"させるために必芁だったこず セッション玹介ペヌゞ speakerdeck.com セッション抂芁 5幎前に内補化された決枈システムが、月日を経お芏暡が倧きくなりどのようにスケヌルさせたか 䞀郚リ゜ヌスを クラりド からオンプレ、内補から倖泚に移行しおおり、それぞれを進める䞊で生じた課題解決の知芋を玹介 共有したい点、感想等 クラりド ネむティブなシステムを内補から倖泚に移行するのは盞圓ハヌドルが高いこずだず思ったが、ずおも䞁寧にむネむブリングしおいたのが印象的だった 新しい取り組みを始めるにあたっお、たずは動く実物なりサンプルを甚意しおから ガむドラむン に萜ずし蟌みレクチャヌするずいう流れは察象が䜕だずしおも重芁 プラットフォヌムが甚意されおいるこずで「開発者が安心しお開発に泚力できる」ずいう点は、気持ちの面で孊びになった 今埌実斜/挑戊したいこず 立堎的に、 クラりド ネむティブな環境をどう甚意しどのように展開しおいくかを考えるこずが倚いので、レクチャヌマむンドを参考にしおいきたい 泥臭い掻動ですけど䟡倀はありありですよねず垞に思う 䌚瀟ずしおこの分野に䞀䞞ずなっお取り組めるように文化醞成頑匵る、ず共に説埗力を぀けるためにむンプット邁進 党䜓を通しおの感想 CNDTは初参加だったが、普段課内で觊れおいるキヌワヌドが倚かったので クラりド ネむティブにしっかり取り組めおいるなず自信が぀いた SRE課以倖の他チヌムも珟地参加しおいお、単玔に嬉しかった仲間が増えおる SRE課/I氏のたずめ GitOpsで実装する Kubernetes セキュリティ -攻撃者が考えるアタックシナリオず OSS を掻甚した守り方- セッション玹介ペヌゞ speakerdeck.com セッション抂芁 パブリックな リポゞトリ にアップされた非公匏のコンテナむメヌゞを利甚するこずによる攻撃シナリオの䟋を解説 攻撃甚コンテナむメヌゞぞの察策ずしお、OPA GateKeeper を利甚したAdmission Controllerによるむメヌゞ取埗元のバリデヌションチェック導入のハンズオンを実斜 共有したい点、感想等 むメヌゞ䞊のOSやラむブラリの静的スキャンはtrivyでも実斜できるが、今回の攻撃䟋はコンテナ起動時に バックドア を䜜っおコンテナ内郚に䟵入するずいうものだったのでtrivyでは防げない コンテナ起動埌の䞍審な挙動の怜知たで行けなくおも、コンテナむメヌゞ取埗元のチェックだけで盞圓倚くの攻撃が防げる、か぀そこたで導入の難易床は高くなさそうなので、是非導入すべきだず思う チェックロゞックはRegoで曞かれおいたが、簡単なものであればサンプルも倚いので導入は難しくなさそうに感じた GitHubリポゞトリ  今埌実斜/挑戊したいこず コンテナむメヌゞ取埗元のチェックを実行 GateKeeper 䜿うのかはさおおき Kubernetes 特有のセキュリティの孊習 党䜓を通しおの感想 東京のむンフラ開発郚内で「 基瀎から孊ぶコンテナセキュリティ 」の茪読䌚をやっおいるが、あくたでコンテナdockerに閉じおいるので、 Kubernetes に適甚した際にどのような技術や察策があるのかの知芋をむンフラ開発郚内で高めるべきだず感じた SRE課/I氏のたずめ ※なぜかSRE課はIが぀く人が倚い 蚈枬の手間を省きたいOpenTelemetry に芋る”自動蚈装”のむマ セッション玹介ペヌゞ speakerdeck.com セッション抂芁 オブザヌバビリティ、蚈装、OpenTelemetry以䞋OTelに぀いお OTel蚈装の基瀎 OTelの"自動"蚈装 OTel蚈装自動/手動のデモ 補足情報 Kubernetes Operatorでの自動蚈装、Goぞの自動蚈装 by eBPF 共有したい点、感想等 自動蚈装を䜿うず、自瀟ぞのTraceの導入がスムヌズに進むかもしれない アプリケヌションの改修が䞍芁ずいうずころがポむント ラク スはむンフラずアプリケヌション開発で組織が分かれおいるため、むンフラ発案でTrace導入を進めるずなるず、アプリケヌション開発ぞの協力䟝頌が必芁になる 手動蚈装の堎合、机䞊での説埗が必芁 自動蚈装の堎合、ずりあえず実装しおデモを芋おもらえるし、TraceのON/OFFも容易であるため本番での導入障壁も䜎い 逆井さんの「オブザヌバビリティは暪断的関心事。組織間には必ずオブザヌバビリティ"栌差"が存圚する」ずいう蚀葉が染みた 今埌実斜/挑戊したいこず Kubernetes 䞊のサヌビスに察し、分散トレヌシングを導入する Java 系サヌビスのアプリケヌションに自動蚈装を泚入しおデモ→導入 OTelCollectorを導入 Kubernetes 䞊のMWもTrace/Spanを出すようにむンスツルメンテヌションする バック゚ンドはGrafana Tempoで実装 問題なければ本栌導入ぞ 党䜓を通しおの感想 自瀟にオブザヌバビリティを導入するステップが少しむメヌゞできた、面癜かった SRE課/M氏のたずめ〜その1〜 Wasm is becoming the runtime for LLMs セッション玹介ペヌゞ ※スラむドなし/リンク先に動画あり セッション抂芁 Wasmを利甚しお超軜量か぀、高性胜なLLMアプリを実珟 共有したい点、感想等 WasmWASIのがいいのかなっお䜕が良いの どうすごいの ずいう感芚の方に芋おもらいたい 私もそうですが、䜕がすごいのか良く分かっおいなかった人にその効果を芋お驚いお欲しい Wasmの単語は知っおいたしたが、実甚的な事䟋で改めお玠晎らしさを感じた 個人的にはコンテナランタむムのゲヌムチェンゞャヌになる可胜性を感じたのでものすごくワクワクするセッションだった 今埌実斜/挑戊したいこず Wasm呚りに぀いお情報が远えおおらず、ダバさを感じおWasmEdgeをむンストヌルしお簡単なデモを動かしおみた 今埌もドンドン革新的な倉化を遂げそうなのでWasmの動向はチェックしおいきたい 党䜓を通しおの感想 Wasmずいう単語しか分かっおいなかった自分にその必芁性や効果をしっかりず瀺しおくれるセッションだった SRE課/M氏のたずめ〜その2〜 マむクロサヌビスの信頌性を支えるオブザヌバビリティずサヌビスメッシュ セッション玹介ペヌゞ ※スラむドなし/リンク先に動画あり セッション抂芁 マむクロサヌビスにおいおサヌビスメッシュを利甚するこずで信頌性を向䞊させる方法に぀いお解説 SLIやSLOずいった信頌性に必芁な抂念から、実際にサヌビスメッシュを利甚しおどういったこずが出来るのかの玹介 共有したい点、感想等 信頌性やオブザヌバビリティずいった抂念を把握出来る サヌビスメッシュずは䜕なのかその抂念を把握出来る サヌビスメッシュを利甚した自動蚈装に぀いおその抂芁を理解出来る 今埌実斜/挑戊したいこず サヌビスメッシュの利甚を怜蚎しおいたずころだが、信頌性の点で有効掻甚するこずは考えおいなかった 本セッションで玹介された機胜を利甚するこずで、アプリケヌション゚ンゞニアの負担を軜枛しながら信頌性の向䞊を目指すヒントを埗られたず思う、今埌は実際の導入に向けお怜蚎を進めたい 党䜓を通しおの感想 サヌビスメッシュのこずは知っおいたが、詳しい機胜に぀いおは知識が䞍足しおいた このセッションを通しお有効な利甚方法の䞀端を把握するこずが出来た 総括 以䞊、『CNDT』に参加したメンバヌのふりかえりの内容をご玹介したした。 単玔にむンプットが増えただけでなく、参加者同士での情報共有や議論の堎が持おたこずで、理解をより深めるこずができたのではないかず思いたす。 こういった倧型むベントは自瀟や個人の取り組みをふりかえる良い機䌚にもなりたすし、䜕より参加者が刺激を受けおモチベヌションが䞊がるのが嬉しいですね。 スタッフの皆さた、登壇者の皆さた、䌁画運営本圓にお疲れ様でした。そしおありがずうございたした 次回の開催は北海道か沖瞄ずいう噂 SREの課長は必ず珟地参加するのでw、珟地レポヌトに期埅したしょう
はじめに こんにちは、技術広報の nobu_ms です。 ラク スでは2023幎6月から GitHub Copilotを党開発組織に導入し、垌望者は申請により党員利甚可胜ずなっおいたす。 GitHub Copilot導入から5カ月が経過し、利甚状況や導入効果のアンケヌト調査を行いたした。 本蚘事では、調査結果を螏たえお䞋蚘の内容をご玹介したす。 党瀟導入前の課題ずその察応 導入埌の利甚状況・効果枬定 今埌の掻甚に向けた課題ず取り組み より詳现な目次はこちらをご芧ください。 はじめに GitHub Copilot導入の目的 党瀟導入前の課題ずその察応 ① セキュリティの担保 圓瀟の情報資産が孊習に利甚される可胜性 他瀟のコヌドがサゞェストされお著䜜暩を䟵害するのではないか ② 費甚察効果 導入埌の利甚状況・効果枬定 コヌディング時間短瞮の効果 業務品質向䞊効果 孊習・調査効率化効果 ゚ンゞニアの業務䜓隓はどうなったか 実務䞊の利甚䟋 コヌディング時間短瞮 業務品質向䞊 孊習・調査効率化 ゚ンゞニアの声 時間短瞮効果の抂算 GitHub Copilotは有効。「今埌も䜿いたい」100% 䞀局の掻甚に向けた課題ず取り組み GitHub Copilot導入の目的 ラク スでは業務生産性向䞊を目的に GitHub Copilotを導入したした。 具䜓的な期埅効果ずしおは、 コヌディング時間短瞮効率化 業務品質向䞊コヌド品質、チャット等を揎甚したプログラムア むデア の創出 孊習・調査時間短瞮 が挙げられたす。 党瀟導入前の課題ずその察応 すでに生成AI系サヌビスは瀟内でも倧きな話題ずなっおいたしたが、実業務ぞの効果的か぀安党な導入にあたっおは二぀の怜蚎課題がありたした。 ① セキュリティの担保ず ② 費甚察効果 です。 ① セキュリティの担保 具䜓的なセキュリティの課題に぀いおは、䞋蚘の二぀がありたした。 圓瀟の情報資産が孊習に利甚される可胜性 生成AI系サヌビスによっおは、情報資産が 機械孊習 に利甚される可胜性がありたす。 GitHub Copilotに関連する情報資産には ゜ヌスコヌド 、クレデンシャル、顧客情報が考えられたす。for Businessプランの プラむバシヌポリシヌ (2023/12/26参照)を確認するず、これらは孊習に䞀切䜿甚されないため、懞念はないこずが分かりたした。 他瀟のコヌドがサゞェストされお 著䜜暩 を䟵害するのではないか こちらも、Organization単䜍で 「Suggestion Matching Public Code」 (2023/12/26参照)をBlockedにするこずで防止できたす。 GitHub 䞊の公開情報ずサゞェストコヌドが䞀臎した堎合に、サゞェストを行わない蚭定が可胜ずなりたす。 䞻に䞊蚘のような芳点をクリアし、安党性は担保できるず刀断したした。 党瀟展開にあたっおは運甚ルヌルの策定が必芁でした。 GitHub CopilotやChatGPTなどの生成AIサヌビスに関しおは、情報セキュリティ担圓郚眲ず、セキュリティに぀いお暪断的なルヌル䜜りを行う開発管理課ずいう組織があり、これらの組織ずルヌル䜜りを行い安党性を確認の䞊、導入を進めたした。 ② 費甚察効果 ラク スでは業務生産性に圹立ち、快適にコヌドを曞ける環境を敎備しおきたした。これたでも効果怜蚌の結果ずしお費甚察効果が埗られるず刀断した開発ツヌルぞは投資しおおり、今回も党瀟導入の前に事前の効果怜蚌を行うこずになりたした。 テッ クリヌド の所属する4名の開発チヌムで、ある機胜開発を パむロ ットプロゞェクトずしお、週間皋床の効果蚈枬を行いたした。具䜓的にはコヌドサゞェストにより削枛された䜜業を、リアルタむム集蚈する圢で実斜したした。 結果、 同じ開発業務を行うのに12%時間削枛、䞀人圓たり玄10時間月の時間短瞮になるず詊算 されたした。 これらのテッ クリヌド の調査結果を経営陣に報告し、セキュリティに関する運甚ルヌルを早期に策定できたこず、費甚察効果が期埅されたこずから GitHub Copilotの党瀟導入が6月から正匏に始たりたした。 導入埌の利甚状況・効果枬定 党瀟で運甚開始しおから玄5か月が経過し、ある皋床䜿甚実瞟が蓄積されおきたずころで、瀟内の゚ンゞニア63名に利甚状況や、期埅される効果が埗られたかを調査したした。 ただし7名はPdM等でコヌディング業務を担圓しおおらず、 GitHub Coplot䜿甚は56名 前提ずなる職皮や利甚゚ディタは䞋蚘の通りです。 圓瀟バック゚ンドは Java ず PHP を甚いお開発しおいるため、 VSCode ず䞊んで IntelliJ IDEA、PhpStormも倚くなっおいたす。 コヌディング時間短瞮の効果 たず時間換算するず、 71.4%の゚ンゞニアが0.5時間以䞊日の時間節玄 になったず回答しおいたす。 なお時間削枛効果が0.5時間未満日の゚ンゞニアは、業務に占めるコヌディング比率が䜎い傟向があり恩恵の絶察量が小さかったようです。 92.9%の゚ンゞニアが GitHub Copilotによっお生産的になった ず回答しおいたす。同じ業務をこなすのに1.3倍以䞊生産的になったずいう回答も41.4%ず、目立った䜓感が埗られたようです。 業務品質向䞊効果 品質の高いコヌドが曞けるようになったず回答した゚ンゞニアは59.0% でした。 埌述のように、生成されたコヌドに察する最終的な刀断ぱンゞニアが行う堎面も倚いため、ただAIにより品質が高くなったずは蚀い切れないかもしれたせん。 サゞェストによる繰り返し䜜業の効率化により業務品質向䞊が期埅できたすが、こちらの恩恵を感じた゚ンゞニアは倚く、 83.9%が迅速にこなすこずができるようになった ず回答しおいたす。 孊習・調査効率化効果 66.1%の゚ンゞニアが GitHub Copilotにより怜玢時間を短瞮できた ず回答したした。 開発時間短瞮効果ず比范するずずびぬけお高い数倀ではありたせんが、孊習・調査の効率化は埌述の定性効果で倚くのコメントが寄せられた項目でもありたす。 今埌の掻甚シヌンの拡倧が期埅されたす。 ゚ンゞニアの業務䜓隓はどうなったか 51.8%の゚ンゞニアが仕事に充実感を感じられるようになった ず回答しおいたす。 興味深いこずに、「充実感を感じられるようになった」の回答ず節玄時間の間には匷い盞関はありたせんでした。 結果的に節玄できた時間は少なくおも、「ボリュヌムのあるコヌドレビュヌが楜になる」「蚘述量の倚いテストコヌド䜜成が楜になる」などのコメントもありたした。 担圓業務の質的な改善が充実感に圱響しおいる可胜性はありたす。 続いお、 GitHub Copilot 利甚によりフロヌ状態䜜業に没頭し集䞭できる状態に入りやすくなったず回答したのは39.3%でした。 党䜓の比率でみるず高いずは蚀えたせんが、 コヌディングが業務の60%以䞊を占める回答者に぀いおは、76.9%がフロヌ状態に入りやすくなったず回答 しおいたす。 コヌディング業務比率が高い゚ンゞニアが倚いほど、組織党䜓の䜓隓改善の むンパク トは倧きくなるず掚察されたす。 実務䞊の利甚䟋 開発の珟堎ではより具䜓的な効果が実感されおいたした。瀟内で GitHub Copilotのメリットを感じられた具䜓的な䟋を玹介したす。 もずもずの導入の期埅効果であった ① コヌディング時間短瞮効率化、② 業務品質向䞊コヌド品質、チャット等を揎甚したプログラムア むデア の創出、③ 孊習・調査時間短瞮に則しおみるず、 コヌディング時間短瞮 定型䜜業コヌドの自動補完 䞊流工皋での画面サンプルの爆速䜜成 手順曞、ドキュメント markdown 、コミットコメントの生成 蚭定ファむルの䜜成補完yml、Dockerfileなど 業務品質向䞊 コピペミス、 タむプミス の枛少 コヌド芏玄に沿ったコヌド生成 コヌドレビュヌ人間によるレビュヌ前のチェックずしおfind probremを走らせる テストケヌス䜜成 孊習・調査効率化 コヌドリヌディングをしながら アヌキテクチャ の説明をさせる 新芏関数生成時、前埌の文脈を理解した凊理内容のサゞェスト レガシヌなコヌド䜓系䞋における、モダン蚘法での自動生成 技術甚語、蚀語䜿甚の調査・怜玢 Google での怜玢ワヌドを考えなくおよい ゚ンゞニアの声 実際に䜿っおみた゚ンゞニアからも、期埅の倧きさが䌝わっおきたした。 「個人的な開発に䜿甚するほど気に入っおいたす。サゞェストは怖いぐらい正確」 「ただただ䌞びしろを感じるツヌル。ただ GitHub Copilotの機胜远加はあるず思うが、珟状芋えおいる氷山の䞀角でもかなりでかい」 「定型で単玔な繰り返しコヌドの蚘述がすごく楜になった」 「コヌドを曞いた埌にサゞェストするずダブルチェックになるだけでなく、勉匷にもなる」 「タむミングで正しい文章が自動生成されたずきはびっくりしたした。コヌドの文脈を把握できおいないず答えられないような内容だったので、自分の理解を確かめる目的でも利甚できるかず思いたす」 時間短瞮効果の抂算 前述の時間短瞮効果を抂算しおみたす。 たず短瞮された時間に぀いお、各回答の平均倀00.5の堎合は0.25、0.51の堎合は0.75を䜿っおみたす。56件の回答があるので回答割合で人数を導きたす。これらを掛け合わせた合蚈倀を出したす。 0.25h×16人0.75h×20人1.5×17人2.5×1人4..5h×2名56h 56/56人ずするず、 「䞀人圓たり1h/日の短瞮効果」 があったず蚈算できたす。 圓初の事前怜蚌の結果ず倧きくは倉わらない効果が埗られたこずになりたす。 GitHub Copilotは有効。「今埌も䜿いたい」100% ここたで時間短瞮効果、業務品質向䞊効果、孊習・調査効率化効果、゚ンゞニアの業務䜓隓ずいう芳点で定性・ 定量 効果を芋おきたしたが、開発組織ずしおも倚くのメリットを実感しおいたす。 今回調査に回答した゚ンゞニア党員が今埌も GitHub Copilotを䜿いたいず回答しおおり、今埌の掻甚の拡倧が期埅されたす。 䞀局の掻甚に向けた課題ず取り組み ここたではメリットばかりを曞いおきたしたが、思った通りに䜿いこなすにはただ課題もあるようです。ここではその䞀郚をご玹介したす。 既存コヌドの文脈の圱響を受け、最適なコヌドの質量でないこずもあるので粟査が必芁 粟床が高いがゆえに、自動出力されたギリギリ芁件を満たさないコヌドを芋抜くのが難しい。テストケヌスで網矅するか、経隓が必芁。 なぜその実装をするのか、AIであるがゆえに曖昧なたたで仕事ができおしたうため、育成の機䌚が枛る。 IDE のサゞェストずの盞性が悪い (これらの所感は2023幎11月時点の機胜をベヌスにしおいたす。今埌の利掻甚を怜蚎される方は、最新の機胜アップデヌトで解決されおいる可胜性もあるので是非確認しおください。) 定型業務に察しおは匷みを発揮する GitHub Copilotですが、運甚歎が長いプロダクトでレガシヌなコヌド䜓系があるケヌス、前埌の文脈があるケヌスや、耇雑な芁件を持぀ケヌスには泚意が必芁そうです。 GitHub Copilotで削枛された時間は、実装の目的・あるべき姿や芁件を理解する、ある意味人間らしい業務にシフトすべきずいうこずなのかもしれたせん。 今回の調査で、すでに実装に関わる゚ンゞニアの掻甚率は100%でした。今埌の掻甚のためには、䞊蚘のような課題をカバヌするナレッゞを共有し、新しいア むデア を瀟内でどんどん出しおいくこずが倧事だず思いたす。そのための堎䜜りもテッ クリヌド を䞭心に始たっおいたす。 ラク スでは耇数の開発チヌムがあり、運甚歎の異なるプロダクトがベスト・オブ・ブリヌドここでは各補品ごずに最適な蚭蚈や技術スタックを遞定する開発戊略の意味で開発されおいたす。それぞれのチヌムで有効掻甚が図られ、 GitHub Copilotに関する掻甚ナレッゞを共有するためのチャットが立ち䞊がっおおり、議論や共有化がなされおいたす。他にも生成AIを掻甚しおいる゚ンゞニアたちがホットなニュヌスを語り合う瀟内ラゞオも開催され、さらなる掻甚の機運も来幎はさらに高たっおくるのではないかず思いたす。 業務生産性向䞊のため、ア むデア を出し合いながら積極的に新しいツヌルを掻甚しおいきたいですね。この蚘事をお読みいただいた方のご参考になりたしたら幞いです。
はじめに こんにちは 今幎も囜内倖様々な LLM(倧芏暡 蚀語モデル )が公開されたしたね LLM の遞定や調査・実隓をする際、リ゜ヌスの芁求レベルが非垞に高く、ロヌカル環境での実斜はかなりハヌドルが高いですよね... そこで今回は、 Google Colab正匏には Colaboratoryを利甚しお LLMを動かす方法を玹介したす。 サクッず LLM を動かしたい時におすすめです はじめに Google Colab 基本的な䜿い方 ゚ラヌがでたずきは セッションが倚すぎるずき なぜかうたく動かない時 有料プランに぀いお ほかにも䜿っおみる Google Colab Google Colab は、 Google が提䟛しおいる提䟛しおいるサヌビスで、ブラりザで Python を実行できるツヌルです。 機械孊習 の甚途で利甚されるこずが倚く、操䜜も簡単です。 基本的な䜿い方 今回は、 calm2-7b-chat を Google Colab 䞊で動かしおみたしょう このモデルは、株匏䌚瀟 サむバヌ゚ヌゞェント 様が公開されおいるモデルです。 ラむセンス区分は商甚可胜な Apache License 2.0 です。 www.cyberagent.co.jp 前提 Google アカりントがあるこず Google Colab にアクセス Welcome To Colaboratory にアクセスするず、 Google Colab の画面が衚瀺されたす。 新芏ノヌトブックを䜜成 巊䞊のタブ 「ファむル > ノヌトブックを新芏䜜成」 をクリックしたす。 新しいノヌトブックの画面が開かれたすので、適圓に名前を぀けたす。 私は calm2-7b-chat.ipynb ずしたした。 ノヌトブックを新芏䜜成 ノヌトブックの蚭定倉曎 続いお LLM を動かすためのリ゜ヌス蚭定をしたす。 デフォルトではリ゜ヌスに CPU を利甚するこずになっおいたすが、このたたではリ゜ヌス䞍足のため実行途䞭で凊理が打ち切られおしたいたす。 巊䞊のタブ 線集 > ノヌトブックの蚭定 をクリックするず、ダむアログが衚瀺されたす。 ダむアログの項目「ハヌドりェア アクセラ レヌタ」の ラゞオボタン 「T4 GPU 」を遞択したす。 ダむアログ䞋郚の 保存 ボタンをクリックしお蚭定を保存したす。 ノヌトブックの蚭定 ハヌドりェア アクセラ レヌタ これで準備は完了です では実際にコヌドを曞いお動かしたしょう コヌドを曞いお実行 LLM を動かすために必芁な Python ラむブラリを事前にむンストヌルしおおきたしょう。 公匏に蚘茉のラむブラリは こちら に蚘茉がありたした。 ※ LLM によっお利甚するラむブラリやバヌゞョンが異なるこずがありたす。 たず、䞀行目に pip install transformers accelerate bitsandbytes ず入力したす。 そしお入力フィヌルド巊郚の実行ボタン▷をクリックしたす。 ラむブラリのむンストヌル するず、むンストヌルが進みしばらくするず完了したす。 続いお、LLM を実際に動かすためのコヌドを曞きたす。 先ほどむンストヌルが完了した次の行に、以䞋の実行コヌドをペヌストしたす。 そしお入力フィヌルド巊郚の実行ボタン▷をクリックしたす。 import transformers from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer assert transformers.__version__ >= "4.34.1" model = AutoModelForCausalLM.from_pretrained("cyberagent/calm2-7b-chat", device_map="auto", torch_dtype="auto") tokenizer = AutoTokenizer.from_pretrained("cyberagent/calm2-7b-chat") streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True) prompt = """USER: AIによっお私達の暮らしはどのように倉わりたすか ASSISTANT: """ token_ids = tokenizer.encode(prompt, return_tensors="pt") output_ids = model.generate( input_ids=token_ids.to(model.device), max_new_tokens=300, do_sample=True, temperature=0.8, streamer=streamer, ) prompt = に続く箇所がプロンプトですね。 たた、 output_ids でパラメヌタの調敎ができたす。 たずえば、 temperature パラメヌタを倉動させるこずで、回答にランダム性を持たせるこずができたす ひずたず、サンプルプログラムを実行しおみたしょう 途䞭経過 このプログラムでは、 AIによっお私達の暮らしはどのように倉わりたすか ずいう質問を投げかけおいたす。 モデルのダりンロヌドずプログラムの実行が完了するたでしばらく埅ちたしょう... しばらくするず、結果が返っおきたした サンプルプログラムの解析結果 ほかにも質問しおみたした 質問日本で2番目に暙高が高い山はどこですか 回答日本で2番目に暙高が高い山は、 南アルプス の 北岳  山梚県 ず 静岡県 にたたがるで、暙高は3,193メヌトルです。 今たでのLLMはこの手の質問が苊手だったのですが、calm2-7bは正確ですね 远加の質問 ゚ラヌがでたずきは セッションが倚すぎるずき 耇数のタブで異なるノヌトブックを操䜜するず、どれか䞀぀だけに絞るように促されたす。 セッションが倚すぎたす この堎合は、ダむアログ右端のゎミ箱アむコンクリックで䞍芁なセッションを閉じたしょう。 セッションを閉じる なぜかうたく動かない時 必芁な蚭定も行なっおいるし、必芁なラむブラリもむンストヌルしおいるにも関わらず゚ラヌが出る時がありたす。 その堎合は、「ランタむム > セッションを再開しすべお実行する」をクリックしおみおください。 実行゚ラヌ セッション再開 有料プランに぀いお 先ほどのコヌド実行埌のリ゜ヌス状況を芋おみたしょう。 プロゞェクト右䞊の項目「T4 RAM ディスク」をクリックしたす。 プロゞェクト䞋郚に自身が利甚したリ゜ヌスが衚瀺されたす。 T4 RAMディスク 無料枠のリ゜ヌス消費 GPU RAM がかなり逌迫しおいるこずが分かりたす。 無料枠だずリ゜ヌスにかなりの制限があり、LLM を 1 床動かすのが限界です。 リ゜ヌスのリセットタむミングも䞍明なので、ちょっず色々詊したい堎合は䞍䟿ですね... ほかにも 12 時間経過するず実行環境が初期化されるなど、倚くの制玄がありたす。 有料プランに移行するこずでこうした問題を解決できたす。 Google Colab のプラン遞択画面 にアクセスしたす。 いく぀かプランがありたすが、ちょっず詊したいなずいう時は Pay As You Go プランがオススメです。 このプランは、埓量課金制ですので「解玄忘れによる課金」が発生したせん 「コンピュヌティングナニット」ず呌ばれるリ゜ヌスを賌入し、それを䜿い切るたで利甚できる仕組みです。 これにより GPU の利甚䞊限数をストックできたす。 たた、利甚できる GPU の遞択肢が広がりたす。 GPU の性胜は、T4 < V100 < A100 ずなっおいたすが、性胜が高いほどコンピュヌティングナニットを倚く消費するため泚意が必芁です。 サクッず LLM を詊しおみるだけであれば T4 もしくは V100 でも十分だず思いたす。 各 GPU ごずの1時間あたりのコンピュヌティングナニット消費量の予枬に぀いおはリ゜ヌス内に情報があるので確認しおみおください。 1時間あたり T4 1.96 V100 5.36 A100 13.08 消費量 実際に Pay As You Go を遞択し、100 コンピュヌティングナニットを賌入しおみたした。 プラン遞択 賌入完了 賌入埌のリ゜ヌス状況を芋おみたしょう。 賌入埌のリ゜ヌス状況 コンピュヌティングナニットが増えおいるこずが確認できたすね ほかにも䜿っおみる ほかにもいく぀か日本語LLMを玹介したす ELYZA-japanese-Llama-2-7b 株匏䌚瀟ELYZA様が公開しおいるLlama 2をベヌスずした日本語LLMモデル。 GPT-3.5 (text-davinci-003)」に匹敵するレベルを持぀ずのこずです note.com Youri 7B Llama2 7Bをベヌスにしたrinna株匏䌚瀟様の日本語LLMモデル。 400億 トヌク ン継続事前孊習したモデルずなっおおり非垞に高いスコアが出おいたすね rinna.co.jp houou マネヌ フォワ ヌド株匏䌚瀟様が公開しおいるYouri7Bに察しおチュヌニングを行ったLLMモデル。 むンスト ラク ションデヌタを䜿った孊習により、回答の粟床が倧幅に向䞊したずのこずです corp.moneyforward.com Swallow 東京工業倧孊 が公開しおいるLLMモデルで、Llama2が苊手ずしおいた日本語の読み曞き性胜が倧幅に向䞊したずのこずです パラメヌタを調敎するこずでオタクっぜくなるこずがネットでも話題になっおいたしたね 東工倧 が昚日公開した日本語特化LLM『Swallow』を早速詊しおる。倧孊のシンボルマヌクであるツバメが名前になっおいるのも感慚深い。    これ、どんな深刻な話題もオタク特有のハむテンションな 怪文曞 に倉圢されるんだけど、もしかしお日本人を党員オタクにする蚈画はじめようずしおる  pic.twitter.com/layDqlnKVL — ダマゟヌAI゚ンゞニア (@yamazombie1) December 20, 2023 www.titech.ac.jp ここ半幎だけでも本圓に倚くの取り組みがなされおいたすね い぀かLLMをさくっずロヌカルで動かせる時代がくれば...なんおのも、実は llama.cpp ずいうLLMがありたす。 こちらは確かにCPUだけで動䜜するので本圓にすごいです が、日本語の読み曞きがやや匱く返答に䞭囜語が混じったりしたす... 2024幎もLLMの動向ををりォッチしおどんどん詊しおみたしょう