はじめに – 社内勉強会を復活させよう
弊社では以前まで不定期で社内勉強会が行われていたのですが、参加人数の減少と主催者の退職でしばらく開催されていませんでした。
そこで、定期的な社内勉強会を開催して社内に根付かせようという試みを個人的に始めてみました。
ひとまず、以前案件で関わらせていただいた他社様の社内勉強会の形式をほぼ丸パクリしてやってみました。
- 毎月開催
- 最終金曜日 17:00〜18:00
- オンライン&オフライン開催
- テーマフリー
結論としては、結構好感触でした。
次回の開催も楽しみにしてもらえているようです。
また、社内向けにはオンラインの録画を、社外向けにはRambleで内容をまとめた記事を公開します。
本記事もそのひとつです。
勉強会の運営に関して、機材なども含めて運用が固まるまでは記事の最後に改善点も書いていこうとおもいます。
これは、私自身の備忘録も兼ねています。
今回の発表内容
今回は以下の5つの発表を行いました。
Javaについて学んだこと
発表者:L.Gさん
技術スタックがTypeScript、Next.js、Tailwindとフロントエンドに偏っており、フルスタックエンジニアを目指すために人気なバックエンド言語のひとつであるJavaを勉強しています。
最終的な目標はJava SE 17 Developer試験に合格することです。
そこで学んだことについて、JavaScriptと見比べながら共有します。
Javaはすべての処理をクラスの中に記述しなければなりません。
これは「オブジェクト指向言語」の特徴のひとつです。
JavaScriptでは変数の宣言にletを使用しますが、JavaではString、int、booleanのように型名を使用します。
また、Javaではvarを使用して変数を宣言できます。
その場合、変数の初期値から自動で型が決まります。
しかし、varは実際に使うことはほとんどありません。
以下はJavaScriptとJavaのコードです。
Javaのコードにのみエラーが発生します。
なぜでしょうか。
const greeting = "Hello"
const year = 2025
const isTest = true
console.log(greeting)
console.log(year)
console.log(isTest)
public class test{
public static void main(String[] args) {
String greeting = "Hello"
int year = 2025
boolean isTest = true
}
}
両方のコードで;が省略されています。
JavaScriptで;省略に慣れている場合は注意が必要ですね。
最後にJava SE 17 Developer試験で出題される問題例を紹介します。
以下のコードの出力として正しい選択肢はどれでしょうか。
int x = 5;
int y = ++x * x++;
System.out.printf("%d, %d", x, y);
- 6, 36
- 7, 36
- 6, 42
- 7, 42
2行目で2種類のインクリメントが使われています。
「前置インクリメント」と「後置インクリメント」です。
前置インクリメントは式の評価時に行われますが、後置インクリメントは式の評価後に行われます。
つまり、++xによってxが6になったあと、x++によって式の計算後にインクリメントが予約されます。(この時点ではxはまだ6です。)
これにより、++x * x++は6 * 6となり、結果の36がyに代入されます。yへの代入が終わったあと、後置インクリメントが行われxが7になります。
従って、正答は2番となります。
紹介した「前置インクリメント」と「後置インクリメント」の使い分けも、var同様に実際に使うことはあまりありません。
基本情報技術者試験(科目A)の勉強方法のおすすめ
発表者:I.Tさん
基本情報技術者試験は科目A(旧午前試験)と科目B(旧午後試験)に分かれています。
科目Aは四択の知識問題、科目Bはセキュリティの長文問題とアルゴリズム問題が中心となっており、それぞれ異なる対策が必要です。
今回は科目Aに合格することを目的として、勉強方法ついての考えをまとめました。
前述の通り、科目Aは四択の選択問題であるため消去法が使えます。
問題を解くときには「点を取る」よりも「減点を減らす」と考えるのがよいでしょう。
身につけていない知識を減らすことで正答を導くだけでなく消去法にも活かせます。
また、おそらく元となる用語リストのようなものから問題を作成していると考えられます。
そのため、過去問を解くことも有効な勉強方法といえます。
では、どのように知識を身につければよいでしょうか。
次のように勉強することで知識を身につけることができると考えています。
- 最大化する
- 連結する
- 体系化する
知識を最大化するには、演習問題の不正解からも知識を取り入れます。
なぜ正解なのか、なぜ不正解なのかを解説を読んで理解し、不正解の選択肢が正解になる場合の問題を頭の中で組み立てるなどをして、1問からできるだけ多くの知識を取り入れます。
知識を連結するには、関連する知識を一緒に覚えます。
ネットワークの階層、開発工程、情報セキュリティの3要素など、関連する知識を1つの大きな知識として身につけます。
そうすることで、他の知識から正解を導き出したり、消去法を用いたりしやすくなります。
知識を体系化するには、知識をジャンルごとにグループ化します。
ネットワーク、セキュリティ、DBなどのジャンルを用意して、知識がどのジャンルに属するかも併せて記憶します。
体系化した知識は思い出しやすくなり、似た用語との混同をある程度防ぐことができます。
科目Aの勉強には「過去問道場」がおすすめです。
過去8〜12回分の問題を解ききれば、科目Aの合格ラインに十分届くでしょう。
これはあくまで目安であるため、自身が安心できる回数をこなすことに越したことはありません。
また、過去問道場は過去問を年度ごとにまとめた「年度別」、または、各分野ごとにまとめた「分野別」で解くことができますが、個人的には年度別で1年分を通しで解くことをおすすめします。
分野別は1回の問題数や難易度がまばらなため、実力が分かりづらく勉強を継続しづらくなります。
年度別で数回解いたあとに苦手な分野が判明してから分野別を利用するのがおすすめです。
学習時間の確保は自分にあったスタイルを模索するのがよいです。
できるときにやるのではなく、決まった時間を確保して積み重ねることで継続しやすくなります。
- 通勤・通学時間を利用する
- 夜に30分
- 土日に1年度分
スマート農業について
発表者:N.Aさん
スマート農業とは「ロボット技術や情報通信技術(ICT)を活用して、省力化・精密化や高品質生産を実現する等を推進している新たな農業」と定められており、現在はAIやIoTも含まれています。
例として、iPadを用いたトラクターの遠隔操縦などが挙げられます。
しかし、無人化や遠隔操縦だけがスマート農業ではありません。
室温や風の強さなどのデータを用いて収穫量を増やしたり負担を減らしたりすることもスマート農業のひとつです。
スマート農業の実証は以下のステップで行われます。
- 研究開発:大学や研究所で新しいアイデアを研究する
- 技術実証:大学や企業で技術を生産現場に導入し、経営改善の効果を明らかにする
- 社会実装:一般の生産現場に導入する
弊社が参入するとするならば2.技術実証となるでしょう。
スマート農業は応用情報技術者試験で出題されることもあります。
例:)令和3年 秋 問7(組込みシステム開発)、令和5年 秋 問7(組込みシステム開発)
スマート農業といえば機械の導入などによって自動化や人手不足解消をねらうイメージが大きいですが、気象、土壌、農地、育成などのデータの収集とフル活用に注目されています。
その実例としてWAGRIというサービスがあります。
WAGRIが様々な企業からデータを収集しAPIとして提供することで、民間企業が新たな営農管理システムを構築を創出することができます。
農業者は民間企業が提供する質の高いサービスを利用できるようになります。
また、一定のルールの下で農業者同士でデータの共有ができ、地域全体で技術力の底上げや技術伝承に取り組むことができます。
WAGRIのAPIを利用するにはデータ利用会員登録が必要です。
利用料は月40000円で、月のデータ転送量を超えると超過料金が発生します。
更に少ないアクセス回数とデータ転送量が定められたお試し会員(無料)もあります。
スライド自動生成ツールを作ってみた
発表者:iwasaki_tさん
代理:私
iwasaki_tさんは有給休暇だったため、私が内容を預かって代わりに発表しました。
Electron製のデスクトップアプリです。
入力欄に作成したい資料のテーマを入力して送信すると、AIが内容をJSON形式で生成してPythonでHTMLとCSSでできたスライド資料に変換します。
はじめはAIで内容の生成とスライド資料の作成を完結させようとしましたが、うまくいきませんでした。
内容はAIが生成しますが、スライド資料の見た目は人間が整えたいのです。
それを実現するために、内容の生成とスライドの生成を分けて行うことにしました。
最初は生成した内容をスライドテンプレートに流し込むものを作りました。
しかし、これではテンプレートを1種類しか扱えず、内容によっては適した表示ができませんでした。
次に、内容に応じて表紙やコンテンツや表などスライドのテンプレートを選択するようにしました。
AIが生成するJSONの各スライドの情報にスライドのタイプを含めるようにしました。
これによって内容とデザインを完全に分離することができました。
内容またはデザインのどちらかを、もう一方に影響を与えず編集できるようになりました。
将来的にはPowerPointファイルやPDFファイルへの出力ができるようアップデートを予定しています。
より詳しい内容はRambleに記事が上がっています。
フロントエンドのテストについて
発表者:私
最近まで案件でフロントエンドのテストを行っていたため、その経験について共有します。
テストのみを行うテストチームへ配属されました。
テスト対象はWebアプリケーションで、テスト環境はWindows11 PC(Google Chrome)でした。
テストの実施前に仕様への理解と整理を行いました。
仕様書に誤りや不明瞭な点があれば開発チームへ指摘し、修正してもらいます。
これは、仕様書を元にテスト項目を自動生成するためです。
テスト項目は以下の3つに分けて管理・実施されました。
- 表示項目
- 機能項目
- 共通項目
表示項目では表示の崩れや文言を確認します。
レスポンシブ対応のチェックのため、スマートフォンの実機での確認もありました。
仕様を把握しきってなくても実施が可能なため、人員を追加して一気に実施されました。
機能項目ではAPIとの繋込みや画面遷移が正しく動作するかを確認します。
異なるプラットフォームでもAPIの動作に差異は発生しないため、PCでのみ確認しました。
できるだけ通常の操作でエラーを再現しますが、再現が難しいものはHTTP通信改ざんツールを使用しました。
仕様への理解が必要なため、テストチームが実施しました。
共通項目では複数画面に渡ってチェックする項目を確認します。
すべての画面で表示されるヘッダーやフッタ―、ボタンの連続押下などの無理やりな操作などを確認しました。
同じ項目を実施するため、テストチームのうち1人が実施しました。
このテスト案件を通して取り入れたいと感じたことは以下の通りです。
- テストチームを独立させ、仕様書の整理から行う
- テスト項目を表示、機能、共通に分ける
- 仕様書からテスト項目を自動生成する
- HTTP通信改ざんツールを導入する
案件ではHTTP通信改ざんにFiddler Classicを使用しました。
Windowsのみ対応の無料ソフトです。
HTTP通信を傍受してリクエストやレスポンスを改ざんできるプロキシサーバです。
macOSまたはLinuxで使用するには有料のFiddler Everywhereが必要です。
調べたところ、macOSで利用できる同様のツールとしてProxymanがあります。
Fiddler Classicとは異なり、アプリから起動したChromium上の通信を傍受・改ざんできるようです。
また、同一Wi-Fiに接続しているスマートフォンの通信も傍受・改ざんできるようです。
開催の改善点
初回の勉強会が無事終了しました。
反省点としては以下が挙げられます。
- 対面参加者もPCでオンラインミーティングに参加する必要があった
- 発表時間がオーバーした
主催者の画面をプロジェクタで投影し対面参加者に見てもらう形式を取っていましたが、発表の音声やオンライン参加者の質問などは各自のPCから聞く必要がありました。
次回から主催者のPCにマイクとスピーカーを接続して発表してもらう形式に変更します。
タイムキーパーを用意することを忘れてしまい、終了時間を20分オーバーしました。
予め発表予定時間は伝えてもらっているため、次回からは忘れずタイムキーパーを用意します。
また、事前に発表内容を知りたいという要望が出ました。
次回は開催前日に募集を締め切り、発表内容を公開してみます。

