ページが見つかりませんでした | ENGINEER.CLUB(エンジニアクラブ)では、一生必要とされるエンジニアになるための役立つ情報を提供します。 https://www.bold.ne.jp/engineer-club ENGINEER.CLUB(エンジニアクラブ)では、一生必要とされるエンジニアになるための役立つ情報を提供します。 Thu, 29 Feb 2024 05:10:32 +0000 ja hourly 1 https://wordpress.org/?v=6.2.4 https://www.bold.ne.jp/engineer-club/wp-content/uploads/2022/03/cropped-favicon-32x32.png ページが見つかりませんでした | ENGINEER.CLUB(エンジニアクラブ)では、一生必要とされるエンジニアになるための役立つ情報を提供します。 https://www.bold.ne.jp/engineer-club 32 32 【JavaScript】forEachで効率的に配列の要素を順に取り出す https://www.bold.ne.jp/engineer-club/javascript-foreach https://www.bold.ne.jp/engineer-club/javascript-foreach#respond Thu, 29 Feb 2024 11:00:57 +0000 https://www.bold.ne.jp/engineer-club/?p=4269 JavaScriptで配列の1つ1つの要素をループ処理で順に取り出して処理を行なう時に用いられるメソッドの1つとして、forEachメソッドがあります。通常ループ処理を行なう時はfor文が用いられることが多いかと思いますが、forEachメソッドを使うことでfor文よりもシンプルなコードで処理を記述することができます。本記事では、forEachメソッドの基本的な使い方やどのような処理を行なうことができるかについて解説します。

1.forEachメソッドの基本構文

JavaScriptのforEachメソッドは、以下のように記述します。

配列名.forEach(コールバック関数(配列の要素));

forEachメソッドは配列の要素を先頭から順に取り出し、引数に指定したコールバック関数を呼び出します。後述しますが、コールバック関数の引数として「配列の要素のインデックス」や「配列自身」を任意で追加して指定することも可能です。

1-1.forEachメソッドの使用例

forEachメソッドを使って配列の要素を順番に出力する例を以下に示します。

const fruits = [‘Apple’, ‘Banana’, ‘Cherry’];

fruits.forEach(function(fruit){
     console.log(fruit);
});

// ↓出力結果
// Apple
// Banana
// Cherry

コールバック関数の引数に指定したfruitに配列fruitsの要素であるApple’, ‘Banana’, ‘Cherry’が順番に入り、1つずつ出力されています。

1-2.for文との比較

1-1.の例をfor文で記述すると以下のようになります。

const fruits = [‘Apple’, ‘Banana’, ‘Cherry’];

for(var i = 0; i < fruits.length; i++){
     console.log(fruits[i]);
}

// ↓出力結果
// Apple
// Banana
// Cherry

for文では繰り返しのカウンター(i)やループの繰り返し条件(i < fruits.length)、カウンターの更新(i++)を指定する必要があります。カウンターのiを配列のインデックス番号として、配列fruitsの中身を順番に参照することで同じ結果となっています。

ただし、以下のように配列の途中の要素がない場合は異なる結果となります。

const fruits = [‘Apple’, ‘Banana’, , , ‘Cherry’];

// forEachメソッド
fruits.forEach(function(fruit){
     console.log(fruit);
});

// ↓出力結果
// Apple
// Banana
// Cherry

// for文
for(var i = 0; i < fruits.length; i++){
     console.log(fruits[i]);
}

// ↓出力結果
// Apple
// Banana
// undefined
// undefined
// Cherry

forEachメソッドでは要素がない場合処理がスキップされますが、for文ではスキップせずに処理されるため、要素が未定義であることを表すundefinedが出力されています。

1-3.引数のコールバック関数に複数の引数を指定する例

前述した通り、コールバック関数の引数として「配列の要素のインデックス」や「配列自身」を任意で指定することも可能です。

1-3-1.2つの引数を指定

コールバック関数に引数を2つ指定するときは、「配列の要素」と「配列の要素のインデックス」を指定します。以下に使用例を示します。

const numbers = [1, 2, 3];

numbers.forEach(function(number, index){
     console.log(“numbers[” + index + “] : “ + number);
});

// ↓出力結果
// numbers[0] : 1
// numbers[1] : 2
// numbers[2] : 3

コールバック関数の引数に指定したnumberに配列numbersの要素である1, 2, 3が、indexには配列numbersのインデックス番号である0, 1, 2が順番に入り、それぞれ出力されています。

1-3-2.3つの引数を指定

コールバック関数に引数を3つ指定するときは、「配列の要素」「配列の要素のインデックス」「配列自身」を指定します。以下に使用例を示します。

var numbers = [1, 2, 3];

numbers.forEach(function(number, index, array){
     array[index] = number * 2;
     console.log(array[index]);
});

// ↓出力結果
// 2
// 4
// 6

コールバック関数の引数に指定したarrayは配列numbers自身を表しており、処理の中でそれぞれの要素を2倍することで配列numbersを更新しています。

2.forEachメソッドの応用例

forEachメソッドの応用例をいくつか紹介します。

2-1.引数のコールバック関数をアロー関数で記述

引数のコールバック関数はアロー関数で記述することも可能です。例えば1-1.の例は以下のように書き換えることができます。

const fruits = [‘Apple’, ‘Banana’, ‘Cherry’];

fruits.forEach((fruit) => console.log(fruit));

// ↓出力結果
// Apple
// Banana
// Cherry

アロー関数を使用することでシンプルに記述することができます。1-3-2.のようにコールバック関数の処理が複数行ある場合は、以下のように処理の箇所を{}で囲います。

var numbers = [1, 2, 3];

numbers.forEach((number, index, array) => {
     array[index] = number * 2;
     console.log(array[index]);
});

// ↓出力結果
// 2
// 4
// 6

2-2.別で定義した関数を引数に指定

引数に直接コールバック関数の処理を記述せずとも、別で定義した関数を引数に指定して処理を行うことも可能です。

const fruits = [‘Apple’, ‘Banana’, ‘Cherry’];

function output(str) {
     console.log(str);
};

fruits.forEach(output);

// ↓出力結果
// Apple
// Banana
// Cherry

引数の値を出力する関数outputの関数名をforEachメソッドの引数に指定することで、別で定義した関数を呼び出して処理を行うことができます。

2-3.forEachメソッドの第2引数にオブジェクトを渡す例

forEachメソッドは第1引数のコールバック関数の他に、第2引数として任意のオブジェクトを指定することができます。第2引数として指定したオブジェクトは、コールバック関数内でthisにより呼び出して使用することができます。

const fruits = [‘Apple’, ‘Banana’, ‘Cherry’];

const fruitsPrice = {
     ‘Apple’: 100,
     ‘Banana’: 120,
     ‘Cherry’: 80,
     ‘Orange’: 90,
     ‘Lemon’: 110,
};

fruits.forEach(function(fruit){
     console.log(`${fruit}の値段は${this[fruit]円です。}`);
}, fruitsPrice);

// ↓出力結果
// Appleの値段は100円です。
// Bananaの値段は120円です。
// Cherryの値段は80円です。

コールバック関数内のthisはfruitsPriceを表しているため、配列fruitsの要素をキーとしてfruitsPriceの100や120といった値を取り出すことができます。

3.forEachメソッドの注意点

forEachメソッドは配列を処理する際に便利な一方で、いくつか注意点があります。

3-1.continueによる処理の中断やbreakによる抜け出しができない

forEachメソッドでは、continueで処理を中断させたり、breakで処理自体を抜け出したりすることができません。forEachメソッド内でcontinueやbreakを記述するとエラーとなってしまいます。そこで、continueやbreakの代替案として同じ処理を行なう方法をご紹介します。

3-1-1.処理を中断させたい場合はreturnで代用

forEachメソッドで処理を中断して次のループ処理を実行させるためにはreturnを使用します。

const numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

// 偶数のみを出力
numbers.forEach(function(number){
     if(number % 2 !== 0){
          return;
     }
     console.log(number);
});

// ↓出力結果
// 0
// 2
// 4
// 6
// 8

returnを用いることでその時点でnumberが奇数の時はコールバック関数が終了され、numberを出力することなく次のコールバック関数が呼び出されます。よって、continueと同じ挙動となります。

3-1-2.処理自体を抜け出したい場合はfor文やsomeメソッドで代用

forEachメソッドで処理自体の抜け出しはできないため、for文やsomeメソッドで代用します。for文を用いた例は以下の通りです。

const numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

// 3までを出力し4以降は出力させない
for(var i = 0; i < numbers.length; i++){
     if(numbers[i] === 4){
          break;
     }
     console.log(numbers[i]);
}

// ↓出力結果
// 0
// 1
// 2
// 3

またsomeメソッドで代用すると以下のように記述することができます。

const numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

// 3までを出力し4以降は出力させない
numbers.some(function(number){
     if(number === 4){
          return true;
     }
     console.log(number);
});

// ↓出力結果
// 0
// 1
// 2
// 3

someメソッドは、配列の要素のうちコールバック関数に指定した条件を1要素でも満たす場合はtrueを返して、全ての要素が条件を満たさない場合のみfalseを返します。つまり、コールバック関数の条件を満たす要素が現れた時点でtrueを返してコールバック関数の呼び出し自体を終了する性質があるため、抜け出したい条件を指定する際にtrueを返してあげることで、配列のループ処理を抜け出すことができます。

3-2.他のメソッドを用いる方が適切な場面がある

配列に対して特定の処理を行いたい場合はその処理に適したメソッドが他に存在するため、forEachメソッドではない方が適切に記述できることがあります。その一例をご紹介します。

3-2-1.配列から特定の要素のみを取り出す場合はfindメソッドfilterメソッド

配列の中から特定の要素を取り出したい場合には、findメソッドやfilterメソッドを使うと良いです。findメソッドはコールバック関数に指定した条件に合致する最初の要素1つを取り出します。

const numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

var findNumber = numbers.find(function(number){
     return number === 3;
});

console.log(findNumber);

// ↓出力結果
// 3

// アロー関数を使うとさらにスッキリ記述できる
findNumber = numbers.find((number) => number === 5);

console.log(findNumber);

// ↓出力結果
// 5

filterメソッドはコールバック関数に指定した条件に合致する全ての要素を配列として返します。

const numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

var findNumbers = numbers.filter(function(number){
     return number % 2 === 0 ;
});

console.log(findNumbers);

// ↓出力結果
// [0, 2, 4, 6, 8]

// アロー関数を使うとさらにスッキリ記述できる
findNumbers = numbers.filter((number) => number % 2 !== 0);

console.log(findNumbers);

// ↓出力結果
// [1, 3, 5, 7, 9]

3-2-2.配列を加工して別の配列を作る場合はmapメソッド

配列の各要素を加工して別の配列を作りたい場合はmapメソッドを使うと良いです。mapメソッドは配列の各要素に対してコールバック関数で処理を行い、その結果を新しい配列として返します。

const numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

const doubledNumbers = numbers.map(function(number){
     return number * 2 ;
});

console.log(doubledNumbers);

// ↓出力結果
// [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

// アロー関数を使うとさらにスッキリ記述できる
const squareNumbers = numbers.map((number) => number ** 2);

console.log(squareNumbers);

// ↓出力結果
// [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

4.最後に

orEachメソッドは配列の繰り返し処理を行なう際に便利なメソッドです。今回ご紹介したように様々な使い方ができる汎用的なメソッドですが、注意点も踏まえて使てみてください。


]]>
https://www.bold.ne.jp/engineer-club/javascript-foreach/feed 0
ITエンジニアに会計がおすすめな理由とは!?現場のエンジニアが解説します。 https://www.bold.ne.jp/engineer-club/accounting-system-engineer https://www.bold.ne.jp/engineer-club/accounting-system-engineer#respond Sun, 07 Jan 2024 03:00:19 +0000 https://www.bold.ne.jp/engineer-club/?p=4247 ITエンジニアにはプログラミング以外にも、現場によって様々な業務知識が求められます。「会計」もその中のひとつです。エンジニアに必要な「会計」は、必ずしも簿記の専門的な知識の深掘りを指していません。どちらかというと、会計の基礎的な知識をベースとして次の2点ができることを指します。

  • お客様と会計業務の会話ができること
  • 会計システムの仕様や扱い方に精通すること

世の中にある会社の数だけ、会計の仕事があります。エンジニアが「会計」の知識を求められる現場に立たされることがあったとしても珍しい話ではありません。

この記事ではITエンジニアに「会計」の知識習得をおすすめしており、その理由について述べております。キャリアプランに迷われている方へ、みな様の選択肢を一つでも増やすことができたら幸いに思います。

1.エンジニアに会計の知識習得をおすすめする理由

ITエンジニアには会計の知識が必要と耳にすることがありますが、実際はどうなのでしょうか。長年エンジニアとして様々なシステムを扱ってきた私の経験上、答えは「必ずしも必要ではないが、出来ればあったほうがよい」です。第1章ではその理由を解説いたします。

1-1.会計システムを支えるエンジニアはニーズがあるから

デジタル化された現代では、多くの顧客が会計システムを導入しています。会計システムを開発したSIerだけではとてもそれらの顧客に対応することはできません。そのため、数多くのSIerが協力して世の中の会計システムを支えているのが実情です。

実際、現場ではエンジニアが不足しています。とある会計システムを開発したSIerでは、新卒でもかなり高額な年収を用意して人材確保に努めているほどです。大手SIerでも、業務の一環として他社の会計システムを扱っていることが珍しくありません。私が新卒で入社した時の会社も、社員の半数が会計システムの業務を行い、半数はその他公共系、インフラ系、といった感じでした。

ITエンジニアには35歳限界説というものがありますが、会計システムの現場では35歳を超えて活躍されている方も珍しくありません。これも、エンジニアへのニーズが高いことを物語っているように考えます。

なお、世の中には会計の知識がなくともご活躍されておられるエンジニアの方も数多くいらっしゃいます。どうしてもエンジニアには会計が必要だという話ではございませんので、誤解のないように補足させていただきます。

1-2.主要な業務は会計とつながっているから

ITエンジニアは大別すると3つに分かれます。

  • 業務系エンジニア
  • WEB系エンジニア
  • 組み込み系エンジニア

このうちの業務系エンジニアが、会計の知識を必要とする場面に多く遭遇します。なお業務系エンジニアとは、企業の特定の業務をIT化するエンジニアのことをいいます。

業務系エンジニアがIT化する企業の主要な業務には、必ずお金が絡みます。そして、そうしたお金の流れを記録していくことが会計業務の基本にあります。つまりすべての主要な業務は会計と必ずつながっていることとなります。

とある八百屋さんの例で考えてみましょう。この八百屋さんは毎朝近くの農家から野菜を仕入れています。そしてパートのおばちゃんが野菜を並べて、お客様に売っています。農家から野菜を仕入れる時にお金がかかります。お客様に野菜を売った時にお金が入ってきます。野菜を販売・管理するおばちゃんに人件費がかかります。

たとえば、この八百屋さんの業務をシステム化するとします。どんな業務管理システムが必要になるでしょうか。

  • 購買管理システムで、毎日農家からいくつ野菜を仕入れているのか、仕入れ値はいくらかなどを管理する。
  • 販売管理システムで、毎日どの野菜が何個売れたのか、売り上げはいくらかを管理する。
  • 人事給与管理システムで、従業員の住所はどこか、パート代はいくらかなどを管理する。
  • 会計システムで、日々のお金の流れを記録する。

八百屋さんがここまでシステマチックにすることはあまり無いと思いますが、少し空想しただけでこれだけの業務をシステム化することが可能です。そして、すべての業務管理のお金のやり取りは最終的に会計システムに連携する必要があります。

いくつ仕入れて、いくつ売って、人件費がいくらかかって、そうした情報をもとに赤字か黒字かが算出されて、国に納める税金の額も決まります。それらは会計に必要な情報なのです。

なお、業務系エンジニアに限らず、WEB系、組み込み系エンジニアでも会計の知識を習得して損はありません。ビジネスリテラシーの高いエンジニアになれるからです。上述のとおり、会社員が行う主要な業務はすべて会計につながっています。上の立場になるほど、会社の利益を意識した会話が増えてきます。会計抜きに会話がしづらくなってくるということです。

1-3.会計システムは基幹システムの主人公だから

基幹システムとは八百屋さんの例でいうと、「人事管理システム」「購買管理システム」「販売管理システム」「会計システム」すべてを指します。基幹システムについて明確な定義はないようですが、要するに会社の主要な業務を管理するシステム群と考えてよいかと思います。

会計システムがこの基幹システムの主人公という話は、すでにご納得いただけるかと思います。人事管理システムにしろ、購買管理システムにしろ、販売管理システムにしろ、すべて会計システムとつながっているからです。

たとえばあなたの担当する業務管理システムが人事給与管理システムだったとします。人事給与管理システムでは下記のお金のやり取りが発生します。

  • 給与賞与
  • 旅費交通費
  • 従業員貸付金
  • 立て替え払い
    etc・・・

これらの金額を会計システム側に連携する必要があります。その時に何を考慮する必要があるでしょうか。

  • 役員報酬などを会計の科目に合わせて再集計する必要があるか?
  • 全社員を集計した金額でいいのか、それとも部署ごとに分けて集計か?
  • どのタイミングで連携したらよいのか?
    etc・・・

会計を意識しながら、こういったことをお客様と詰める必要が生じるでしょう。

つまり基幹システムを構築する場合、どの業務管理システムを担当するにしても、会計システムを意識せざるを得ないということになります。逆にいうと、会計の知識は基幹システムのどれを担当しても役に立つということです。

なお補足ですが、基幹システム以外のシステムでは会計に出番が回ってくることはほとんどなくなります。たとえば、八百屋さんの宣伝用の「ホームページ」を作成するケースを考えてみましょう。

「ホームページ」は安売りの開催等を告知するだけの用途で使用されるものとします。無くても八百屋さんの本来の業務に大きな支障はありません。基幹システムの定義からは外れることになり、会計の出番もありません。

想像してみてください。

この八百屋さんの宣伝用ホームページ作成に会計の知識が必要になることは、まず無さそうですよね。

2.エンジニアにおすすめする会計の勉強方法

では、会計知識を身に付けるにはどうしたらよいのでしょうか。私は日商簿記3級の資格取得をおすすめします。第2章では日商簿記3級をお勧めする理由について解説いたします。

2-1.資格制度を利用して知識を身に付けよう

日商簿記3級は、簿記試験の中でも難易度のやさしい資格です。よく世間では日商簿記2級から履歴書に書くことができるといわれます。しかしまずはあせらずに3級からチャレンジしましょう。担当する業務によっては、3級で十分なことも多いです。日商簿記3級を学ぶことで、以下のことが期待できます。

  • 会計で使われる仕分けの仕組みについて、ある程度理解できる
  • 会計で使われる勘定科目等の独特な用語について、ある程度理解できる
  • 会計の重要な目的の一つである財務諸表作成までの流れについて、ある程度理解できる

会計ではたくさんの勘定科目が登場します。

  • 「前受金」
  • 「前渡金」
  • 「売掛金」
  • 「買掛金」
    etc・・・

これらの勘定科目がどのように使われているのか。財務諸表の中でどのような意味を持っているのか。そもそも財務諸表とは何者か。お客様と会話する時にはこれらの会計の用語が飛び交う事になるでしょう。

また、開発・運用・保守の現場においても会計を理解していることはシステム仕様の理解につながるのでとても重要です。プログラム能力が多少見劣りしていても(あるいはなくても)、会計とシステム仕様を理解していることで重用してもらえることもあるくらいです。まずは日商簿記3級を取得して、必要に応じて上級資格にチャレンジすることをおすすめします。

3.エンジニアにおすすめする会計が学べる本3選

エンジニアとして、より実践的な知識を身に付けたい方にはエンジニア向けに会計を解説した本があります。資格取得で会計を体系的に学ぶのと並行して、これからお勧めする本を読むことでより知識が実務と有機的につながってくるはずです。第3章では、私がお勧めする本3選をご紹介いたします。

3-1.エンジニアが学ぶ会計システムの「知識」と「技術」

ダントツでおすすめしたいのがこちらです。エンジニア向けに会計と会計システムを解説した良書です。このような内容が解説されています。

  • エンジニアが会計システムを扱ううえで必要な会計基礎知識の解説
  • 会計システムでどのように会計が実現されているかの仕組みを解説
  • 周辺業務システムと会計システムの関係を解説
  • 会計システム構築プロジェクトの進め方、運用保守の実態について解説
  • 会計システムの今後のトレンドについて解説

会計システムを扱うためにエンジニアが学ぶべきことが一通り網羅されているように思います。会計知識とシステムの仕組みを紐づけて解説してくれているので、非常にわかりやすいです。会計システムにはどんなマスタが必要になるか、どんな連携が必要になるのか、会計システム構築のリスクは何か。エンジニアを経験された方が執筆に加わっているので、まるで現場の空気感が伝わってくるようです。これ1冊読むだけでも十分に思えるくらい、充実した内容です。

3-2.ITエンジニアのための業務知識がわかる本

より業務知識に特化しているのがこちらの本です。主に上流のエンジニアが読むべき本かと思います。なおITエンジニアの公的な資格試験(ITパスポート、基本情報処理技術者試験等)でも、ストラテジ系の知識が問われます。そうした試験の対策にもなります。版を重ねること第5版。筆者の方の読者への思いがつまったベストセラーです。

3-3.ITエンジニアとして生き残るための会計の知識

こちらもITエンジニア向けに会計の知識を解説した本です。現代のビジネス3大スキルは「語学」「IT」「会計」といわれます。じつは「会計」は、3大スキルのひとつなのです。

しかしITエンジニアはこの中で特に「会計」のスキルと馴染みが薄い状況といわれるそうです。そのような状況を踏まえてエンジニア向けに会計の知識習得を目的として書かれた本です。

4.(会計システムにおける)経理担当とエンジニアで違う会計知識の使い方

私は昔、経理の仕事をしていたことがあります。会計については、実務をこなせる程度の知識が備わっていました。第4章では、そんな私が会計システムの現場に入って感じた、経理担当とエンジニアの会計知識の使い方の違いについて解説します。

4-1.経理担当者はシステムをどう使うか

経理担当者が会計システムを使って実現したいことは何でしょうか。お金の流れや取引を記録して、最後に財務諸表を作成することです。そのために経理担当者は、会計システムの基本的な使い方を理解する必要があります。

正確な会計処理のために会計システムをどのように扱えばよいか。または、会計システムの機能をどのように活用したら、会計業務が効率化できるかということを考えます。

  • 繰り返し発生する日々の入力業務をテンプレート化できないか
  • 消費税の端数処理の設定はどこで行うか
  • 外貨のレートはどこで登録したらよいか
  • 他の業務システムとどのように連携したらよいか
    etc・・・

経理担当者は、会計システムをどう使ったら、自分のやるべき会計の業務が実現できるか、効率化できるかという視点を持ちます。会計システムの使い方を理解して利用する際に会計の知識を活用することとなります。

4-2.エンジニアはシステムをどう作るか

一方エンジニアは、会計をシステムで実現するためにどういう機能が必要か、どうしたらより効率的な業務が可能になるかということを考えます。

  • 日々繰り返されるような入力業務についてはテンプレートをマスタに登録できるようにしよう
  • 消費税では端数処理が必要なケースがあるので、端数処理の方法を設定する画面を用意しよう
  • 外貨レートを管理するマスタを用意し、レートを自動更新出来る仕組みを作ろう
  • 他業務からデータ連携するために、csvデータを取り込める機能を用意しよう
    etc・・・

会計を全く知らないで、こうした考慮を漏らさずにシステムを作ることができるでしょうか。また、お客様と会話できるでしょうか。エンジニアは、どういう仕組みで会計システムを作ったら、お客様の会計の業務が実現できるか、効率化出来るかという視点を持ちます。会計システムで必要な機能を理解して開発する際に会計の知識を活用する事となります。

5.さいごに

冒頭に申し上げた通り、エンジニアに会計の知識は必ずしも必要ではありません。実際会計を意識せずに対応可能な現場はいくらでもあります。会計システムの開発現場でさえも、担当箇所によっては会計の用語が出てこないこともよくあります。

しかし会計に熟知し、会計システムの扱いに長けたエンジニアは、上流でも下流でも重宝されているのもまた事実です。そして「会計」はニッチなスキルではありません。身に付ければ、どこでも活かせる汎用性の高いスキルです。会計の現場以外で活躍しているエンジニアは、会計の代わりにその現場で必要な知識をキャッチアップしているはずです。

果たしてそれは、その現場以外でも使える知識でしょうか?

プロジェクトが終わって他の現場に移った時に、活かせる知識なのでしょうか?

会計は、活かせます。

会計の仕事は、いくらでもあるからです。希望すれば次も会計のプロジェクトに就ける可能性がいくらでもあります。

キャリア形成に迷われている方へ。この記事では特に会計にフォーカスをあてて、エンジニアが身に付けておきたいスキルの一例としてご紹介しました。エンジニアを優位にするのは決して会計だけではありません。会計に限らず、専門的な知識を持つことでエンジニアの優位性はかなり高くなります。会計はあくまでその中の一つにすぎません。

しかし、どの業種でも使われるため、活躍の場を広げられるスキルなのでおすすめしました。皆様のキャリア形成の参考になれば幸いです。

]]>
https://www.bold.ne.jp/engineer-club/accounting-system-engineer/feed 0
VBA Countifメソッド ~メソッドの解説と使用例~ https://www.bold.ne.jp/engineer-club/vba-countif https://www.bold.ne.jp/engineer-club/vba-countif#respond Sat, 06 Jan 2024 03:00:05 +0000 https://www.bold.ne.jp/engineer-club/?p=4235 VBAを使って売上表等の集計を行う際には、「Countifメソッド」を使います。

ここでは、基本的な使い方を紹介していきます。

1.Countifメソッドについて

1-1.Countifメソッドとは

指定した範囲内のセルのうち、条件に一致するセルの個数を返します。

1-2.Countifの構文

WorksheetFunction.Countif([セルの範囲], [条件])

以降のVBAでは、こちらの表を使用します。

表1

2.Countifメソッドの使用例

2-1.基本的な使用例

表全体から「モニタ」と書かれたセルの個数を取得

Sub sample01()
    Dim cnt As Integer

    cnt = WorksheetFunction.Countif(Range("A1:D7"), "モニタ")

    MsgBox cnt

End Sub

結果:

結果1

3.特殊な書き方をする場合

3-1.ワイルドカードを使う

3-1-1.前方一致

表全体から「ノート」から始まるセルの個数を取得

'前方一致
Sub sample02()
    Dim cnt As Integer

    cnt = WorksheetFunction.Countif(Range("A1:D7"), "ノート*")

    MsgBox cnt

End Sub

結果:

結果2

3-1-2.後方一致

表全体から「ート」で終わるセルの個数を取得

'後方一致
Sub sample03()
    Dim cnt As Integer

    cnt = WorksheetFunction.Countif(Range("A1:D7"), "*ード")

    MsgBox cnt

End Sub

結果:

結果3

3-1-3.前方後方一致

表全体から「トパ」を含むセルの個数を取得

'前方後方一致
Sub sample04()
    Dim cnt As Integer

    cnt = WorksheetFunction.Countif(Range("A1:D7"), "*トパ*")

    MsgBox cnt

End Sub

結果:

結果4

3-2.比較演算子を使う

D列(値段欄)から「5000超」のセルの個数を取得

Sub sample05()
    Dim cnt As Integer

    cnt = WorksheetFunction.CountIf(Range("D1:D7"), ">5000")

    MsgBox cnt

End Sub

結果:

結果5

3-3.その他の使用例

3-3-1.複数条件を使う場合

下記のように、「countifs」を使うことでセルの範囲と条件を複数設定することができます。

WorksheetFunction.CountIfCountif([セルの範囲1], [条件1], [セルの範囲2], [条件2], …)

例)A社、かつ値段が10万円超

Sub sample06()
    Dim cnt As Integer

    cnt = WorksheetFunction.CountIfs(Range("B1:B7"), "A社", Range("D1:D7"), ">100000")

    MsgBox cnt

End Sub

結果:

結果6

3-3-2.別シートのセルを指定する場合

別シートのセルを参照したい場合は、セル範囲でシート名を指定します。

Sub sample07()
    Dim cnt As Integer

    cnt = WorksheetFunction.CountIf(Worksheets("商品表").Range("C1:C7"), "ノート*")

    MsgBox cnt

End Sub

結果:

結果7

4.最後に

Countifメソッドは、範囲や条件を指定した結果をさらに次の処理へつなげることができます。ぜひ、使いこなしてください。

]]>
https://www.bold.ne.jp/engineer-club/vba-countif/feed 0
vba do whileの使い方 https://www.bold.ne.jp/engineer-club/vba-do-while https://www.bold.ne.jp/engineer-club/vba-do-while#respond Mon, 25 Dec 2023 13:30:23 +0000 https://www.bold.ne.jp/engineer-club/?p=4230 vbaで処理を実行し続ける方法は、forステートメント、do whileステートメント、do Untilステートメントなどがあります。ここでは、”do whileステートメントについて、forステートメントとの使い分けも含めて説明していきます。

1.do whileについて

1-1.vbaにおけるdo while

do whileステートメントは、繰り返し処理を実行させたい場合に使用する制御構文です。forステートメントとは違い、繰り返す回数が決まってない場合でも使用できます。

1-2.使用上の注意

繰り返す回数が決まってないため、条件次第では、永久に処理を実行し続ける無限ループに陥ることがあります。使用する際は、指定した条件に終わりがあることを確認しましょう。無限ループさせてしまった場合は、[ESC]キーをクリックして処理を中断させてください。

2.do whileの使い方

2-1.do while loopとdo loop whileについて

  • do while loop

do while Loopは条件式を判定してから処理が実行されます。以下は基本の書式になります。

Do while 条件式
    処理
Loop

<例>
ループ処理のたびに1ずつ加算し、5以上になるまで繰り返すプログラム。

Sub sample()
Dim a As Integer
a = 1
Do While a < 5
  Debug.Print a & "回目。"
  a = a + 1
Loop
End sub
  • do loop while

do while Loopでは最初に条件式を判定するため、条件を満たさなければループせずに処理が終了することもあります。最初の1回だけでも処理させたいときには、do loop whileを使いましょう。以下は基本の書式になります。

Do
    処理
Loop while 条件式

<例>
1から10のランダムな数を計算して、5が出るまで繰り返すプログラム。
5が出るまで処理がループします。

Sub sample()
Dim a As Integer
Do
  num = Int(Rnd * 10) + 1
  Debug.Print  a & "が出ました。"
Loop While a <> 5
End sub

2-2.forステートメントとの使い分け

どちらも処理を繰り返すときに用いられる制御構文ですが、以下の様に使い分けることが出来ます。繰り返し処理させたい回数が状況に応じて変わる場合はdo whileステートメント。繰り返し処理させたい回数が決まっている場合はforステートメント。

例えばこんなときは、do whileステートメント

  • 特定の値や文字が入力されるまで処理を続ける様なプログラム
  • 繰り返し処理の判定条件が乱数の様な変化する値に依存するプログラム

例えばこんなときは、forステートメント

  • 繰り返し回数が処理の結果に依存することが無いプログラム
  • 指定した終了条件に達すれば処理を終了する様なプログラム

3.応用編

3-1.ループを途中でスキップさせたいとき

ループを途中でスキップさせるには、GoToステートメントを使います。GoToステートメントのラベルdo whileステートメントのループ内の先頭に指定します。GoToステートメントに到達すると以降の処理は実行されずに、ループの最初(ラベルの位置)へ移動します。

<例>
繰り返し回数が3になると処理をスキップするプログラム

Sub sample()
Dim i As Integer, str As String
 
  Do While i < 5
L1: ‘←GoToステートメントのラベル
   i = i + 1
   If i = 3 Then
    GoTo L1
   End If
   str = str & i & "回目です" & vbCrLf
  Loop
  
  str = "処理が終了しました"
  MsgBox str
End sub

3-2.ループを抜けたいとき

ループを途中で抜けるには、Exitステートメントを使います。処理がExitステートメントに到達すると、ループ内のそれ以降の処理は実行されずにループを抜けます。

<例>
繰り返し回数が5になるとループを抜けるプログラム

Sub sample()
Dim i As Integer, str As String
 
  Do While i < 10
   i = i + 1
   If i > 5 Then
    Exit Do
   End If
   str = str & i & "回目です" & vbCrLf
  Loop
    
  str = "5回目で終了します"
  MsgBox str
End sub

繰り返し処理を実行させる方法として、do whileステートメントを紹介しましたが、冒頭にも記載した通り、繰り返し実行させる方法は他にもあります。状況に合わせて使い分けるようにしてください。

]]>
https://www.bold.ne.jp/engineer-club/vba-do-while/feed 0
資本主義後の新たなビジネスモデルは「オープンソースムーブメント」で築かれる! https://www.bold.ne.jp/engineer-club/open-source-movement https://www.bold.ne.jp/engineer-club/open-source-movement#respond Mon, 25 Dec 2023 08:55:05 +0000 https://www.bold.ne.jp/engineer-club/?p=4216 株式会社ボールドの福井克明取締役より、ENGINEER.CLUBの読者向けに投稿する機会を頂きました。そこで、Linuxのみならず、多くのオープンソースソフトウエアの開発の源である、オープンソースムーブメントについて書くことで読者の皆様がより良いキャリアを築くことが出来ればと思い、この寄稿文を書きました。

皆様ご存じの通り、戦後日本は資本主義のビジネスモデルを採用し、生活必需品が市場にあふれるほどに成長しました。しかし過去30年間の日本のGDPの平均成長率は0.8%と非常に低い状況です。ちなみに、1956年から1973年までの日本の平均成長率は9.2%でしたので過去30年で約10ポイントも落ちたことになります。実は、日本のみならず、資本主義を採用して成長したG7諸国の成長率も鈍化しています。

G7諸国のGDP成長率

それでは、資本主義後のビジネスモデルとして、日本は「どのようなビジネスモデルを採用すれば更なる成長が可能か?」が問題です。この点に関して、TVなどにも頻繁に登場し、多くの著書がある経営コンサルタント・著作家の山口周氏は著書“ビジネスの未来―エコノミーにヒューマニティを取り戻す”で「無償の贈与」をベースにしたビジネスモデルが今後は重要と説かれています。そして、「無償の贈与」方式の成功事例として、オープンソース方式で開発されたコンピュータのオペレーティングシステム、「Linux」のことを述べておられます。また、経営学者である田坂広志氏も著書“「21世紀の資本主義を語る」で、今後重要となるビジネスモデルの一つは「ボランタリー経済」だと説かれています。そして田坂氏は「ボランタリー経済」の成功例としてやはり、多くのIT技術者のボランタリー活動により開発された、Linuxについて紙面を割かれています。IT業界に属されない、山口氏と田坂氏がそれぞれの著書でオープンソース方式で開発されたLinuxの成功を資本主義後のビジネスモデルの成功事例の一つと考えておられるのは非常に意義があり、また的を得ていると私は感じます。

山口氏及び田坂氏が著書で述べられたLinuxはインターネット上で多くのIT技術者やIT企業が自分や自社のソフト開発能力を無償で提供する方法で開発されたコンピュータのオペレーティングシステム(OS)です。多くのIT技術者やIT企業のボランタリー活動により開発されたLinuxは、現在、パソコン(PC)以外の分野では最も多く利用されているOSと言われるほどに普及しました。

IT技術者やこれからIT業界に入ろうとされている方々は特にこのLinuxの開発原動力になった「オープンソースムーブメント」が生み出している新たなビジネスモデルを理解することが、キャリア形成に不可欠だと思います。それ故に、上記の2氏が著書で指摘されたことに加えて、私が長年IT業界で得た知見も加えて、私が「資本主義後の新たなビジネスモデルはオープンソースムーブメントで築かれる」と思う理由を説明します。

1.オープンソースムーブメントとは?

まず、世の中を根本的に変えた「インターネット」はオープンソースムーブメントにより開発されたということを皆様はご存じでしょうか?

オープンソースムーブメントとは、多くの技術者や企業が技術開発に無償で参加し、その成果を公開し、多くの場合、その成果を誰でも無償で利用出来るようにする開発形態をオープンソースムーブメントと呼びます。現在、このオープンソースムーブメントはIT業界のみならず、幅広い分野に広がっていますが、ここでは主にIT業界でのオープンソースムーブメントについて説明します。

驚くことに、オープンソースムーブメントで開発されたインターネットは、最も秘密を重要視する米国国防省の研究所であるARPA(Advanced Research Project Agency)が開発した、「ARPANET」と呼ばれるネットワーク技術が中核となっています。ARPANETの開発には私が勤務していた米国のコンピュータメーカDEC、IBM、そして色々な大学などの研究機関が無償で開発に貢献しました。そして、米国はその開発で得た技術内容を秘密にせず、無償で公開したのです。インターネット技術は、この無償で公開されたARPANETの技術をベースに、再び多くの技術者や企業が無償で開発に貢献して出来上がりました。従って、インターネット技術にも秘密はありません。また、ある特定の企業や組織が特許を有することもありません。ようするにインターネットは多くの技術者や研究所、企業などが参加したオープンソースムーブメントにより開発され、無償で提供されたのです。

米国主導で開発されたインターネットですが、ソ連(現在のロシア)や中国など、米国と対峙する国々もインターネットを採用したのは、インターネットがオープンソースムーブメントで開発され、米国政府や米国企業が知財を有さないからです。もし、米国政府や米国企業が知財を有する方式を採用していたら、ソ連や中国は、インターネットと互換性のない、それぞれ別のネットワーク方式を開発したと思います。このように、オープンソースムーブメント方式は資本主義後vs共産主義のような政治体制の枠を超えて、グローバルに通用する技術の開発モデルであることを理解することが非常に重要だと感じます。

2.無償の貢献が、貢献国・貢献企業・貢献者に金銭的なメリットや名誉を提供する仕組みとは?

多分、ここで皆様が知りたいのは、オープンソースムーブメントの世界で無償の貢献をすれば、どのような仕組みで金銭的メリットを得ることが可能なのか?だと思います。この点を理解する為に、インターネットをオープンソースムーブメント方式で開発し無償公開した米国の金銭的な収支を考えてみましょう。まず、我々は、インターネットを利用して世界にビジネスを展開し、巨額の売上・利益を上げている会社は殆ど米国企業であることを認識する必要があります。俗にGAFAM (Google, Amazon, Facebook, Apple, Microsoft)と呼ばれる巨大企業は全て米国企業です。GAFAM以外にクレジットカード会社のマスターカードやVISAカードNetflixなど多くの米国企業がインターネットを利用して世界にビジネス展開しています。更に、動画の配信ビジネスの最王手であるNetflixもやはり米国企業です。

米国政府が主導して「無償の貢献」や「ボランタリー活動」により成り立つ「オープンソースムーブメント」で開発されたインターネットは、巨額の金銭的メリットを米国企業の繁栄を通じて米国に与えたことは改めて説明するまでもありません。米国がインターネットを無償で世界に提供したが故に、上記した米国企業はグローバルにビジネスを展開し、それぞれの分野で圧倒的な優位性を築くことが出来ました。この事実は、「オープンソースムーブメントが創り出した新たなビジネスモデル」は資本主義での成長が鈍化した米国にとり、非常に有効であることを証明したと思います。

オープンソースムーブメントでは、最大の貢献者が最大の受益者になる可能性が最も高いことは国のみならず、企業や個人レベルの貢献者にもあてはまることを後に説明します。その前に、オープンソースムーブメントが国に与える「ソフトパワー」について説明します。

3.オープンソースムーブメントとソフトパワー そして国の制作

ソフトパワーとはハーバード大学のビジネススクールで長年教鞭をとっていたジョセフ・ナイ氏が生み出した表現です。なおジョセフ・ナイ氏は米国の民主党政権でしばしば政府高官を務め、日本についても精通した人でした。

ナイ氏の考えを要約すると、「他国を自国の思うように動かす方法として軍事力と経済力で相手国を動かすハードパワー方式と、自国の価値観や文化を相手国内に普及させることにより相手国を動かすソフトパワーがある」ということです。

現在、起きているウクライナにおける戦争において米国はウクライナに軍事的な面で多額の援助を提供しているのは皆様ご存じの通りです。一方、米国がオープンソースムーブメント方式で開発したインターネットにより、ロシアには米国の文化やライフスタイルが浸透していました。例えば、ロシア国内におけるマスターカードやビザカードの浸透です。また、多くのiPhoneをロシア人が愛用することで、米国的なライフスタイルがロシア内に普及していました。例えば、カーリングの世界大会に参加したロシアの選手がApple Watchを利用していたのを私もTVで何回も見ました。

ロシアのウクライナへの侵攻により起きた今回の戦争で米国政府は米国企業に対してロシアからの撤退を要請し、多くの米国企業がその要請に応えました。アップル社は2022年3月1日に米国企業の中では一番最初にロシアから撤退したと報じられています。そしてビザとマスターカード両社は2023年3月5日にロシアでの業務を停止すると発表。Googleもロシア向けのGoogle Play等の課金システムを停止したと報じられています。

米国の3大クラウド提供会社であるアマゾン, マイクロソフトそしてグーグルの三社はそろってロシアにおける新規契約の受付を停止したとも発表しています。

このような制裁は、ロシアに対する米国の経済的な制裁と見なすことが出来ますが、米国的なライフスタイルに慣れた国民を有するロシアに対する米国のソフトパワーによる制裁の側面が強いと思います。

米国政府は、Googleがオープンソース方式で開発したスマホ向けOS「アンドロイド」を中国企業が使用することを禁止することに成功しました。この禁止処置により中国のファーウエイはスマホのマーケットシェアを著しく落とし現在でも低迷しています。ファーウエイは自社製のOSを作りましたが、アンドロイド上で形成されたエコノミーシステムを自社のOS上に移すのは容易ではないと思います。

(なお、「オープンソース・イニシアティブ(OSI)」による「オープンソース」の定義では、「特定人物・集団に対する差別の禁止」が明記されています。従って米国政府の要望に応える形で、Googleが中国企業のファーウエイ社がアンドロイドを使用できなくしたことにより、OSIの定義に従えば、アンドロイドはオープンソースソフトではなくなりました。ただ、企業や個人がOSIの規定に従わなければならないとの法的な拘束力はありません。)

上記のように、オープンソースムーブメントは、国の政策にも多大な影響を与えるほどの大きな潮流になっています。このような、オープンソースムーブメントが引き起こしている大きな流れは、当然、IT技術者やIT企業に多大な影響を与えますので、我々IT技術者は注意を払っている必要があります。

4.オープンソースムーブメントでの貢献が企業に与える金銭的メリット

上記(2)と(3)では、インターネットの開発における最大貢献国である米国が得た金銭的なメリット及びソフトパワーについて説明しました。

次に、企業にとってもオープンソースムーブメントがビジネスモデルとして十分に成立することを米国のRed Hat社を事例として説明します。Red Hat社は、Linuxなどのオープンソース方式で開発されたOSSに関連する諸々のサービスビジネスのみでNew York証券取引所に上場する大企業になりました。そして、このRed Hat社の買収にIBMは34ビリオンドル、約5兆円、の買収資金を投じました。この買収金額は、IBMが今まで他社を買収する際に支払った金額で最大です。
RedHat社はLinux等のオープンソースソフトの改善に非常に多くの無償の貢献をしています。そして、その貢献度の高さを自社の差別化要因として色々な方法で宣伝をしています。しかしRed Hat社は、Linuxの改善に貢献したからといって、自社が改善したLinuxの著作権使用に対する金銭的な対価を使用者に求めることはしません。従って、RedHat社は金銭的な価値を生み出す知財を持たない企業と言えます。

2022年11月に楽天本社で開催された楽天テクノロジーフォーラムにて講演をしたRed Hat社のCTOであるクリス・ライト氏は、「IBMが知的財産を有しないRed Hat社の買収に34ビリオンドルもの大金を払ったことは、多くのIT企業が自社の知財で売上・利益を上げていたのとは全く異なる、新たな時代の流れを感じる」と述べました。私もその通りだと感じます。要するにRed Hat社のビジネスモデルは自社が重要と考えるオープンソースソフトの改善に大きく貢献することで、そのソフトの「サービスビジネス」で他社に対して優位性を築き多額の売上・利益を上げるモデルです。これは「オープンソースムーブメントが創り出した新たなビジネスモデル」の一つです。

世界の自動車で利用されるマイクロプロセッサーユニット(MPU)で、日本のルネサスエレクトロニクス株式会社(ルネサス)は世界トップクラスのシェアを有します。その大きな理由は、自動車などに利用されるMPU向けのLinuxの改善活動でルネサスが非常に高い貢献度を維持していることにあります。
Linuxの改善は、多くの企業やIT技術者が無償で改善ソフトを開発し、その改善ソフトを、優秀なLinux技術者のボランタリー活動で成立しているLinuxコミュティーに送ります。Linuxコミュニティーでは、無償で提供された改善ソフトを審査します。そして、この審査委員会は、最も良いと判断した改善ソフトを
最終的にはLinuxの開発責任者であるLinus Torvalds氏に送ります。

Linus Torvalds氏

上記の審査委員会はLinuxの機能別に編成されています。種々の審査委員会が選別した多くの改善ソフトをLinus Torvalds氏が最終的に調べ、彼の最終承認を得た改善ソフトがLinuxの新しいバージョンに組み込まれる仕組みになっています。別の言い方をするとLinuxは上記のような「貢献の競争で勝った」人や企業が提供したソフトの集合体と言えます。この仕組みをビジネスモデルの観点で説明すると、上記の「貢献の競争」に勝った企業や個人は非常に高い確率で、最大の金銭的リターンを得ることが出来ると言えます。例えば、ルネサスの場合で言えば、自社が提供した改善ソフトに関連する自動車の分野では、ルネサスが設計するMPUが最も高速に動作する確率が高くなります。このように、Linuxの改善活動では、最大の貢献社(者)が、貢献した分野のビジネスの面で他社に対して圧倒的な優位性を築くことが可能になる確率が非常に高くなる仕組みです。

上記したような仕組みは、Linuxのみならず、他のオープンソースソフトウェアにもあてはまる場合が多いのです。

5.個人レベルでも、最大の貢献者が最大の受益者になる

「インターネットの父」と検索すると村井純 慶応大学名誉教授が表示されます。そして、そのサイトから村井先生がインターネットに関連する幅広い分野で、活躍されたことを知ることが出来ます。村井先生の貢献の一つはオープンソースムーブメントで開発されたインターネットを、日本語を含む英語以外の言語(マルチバイト言語)で利用出来るように無償の貢献をされたことです。この貢献により村井先生は著名になられ、教育分野のみならず、ビジネスの世界も含めて非常に幅広い分野で活躍されるようになりました。

このように、オープンソースムーブメントが生み出す新たなビジネスモデルは能動的な無償の貢献者・貢献企業・貢献国に金銭的なメリットのみならず、名誉をも与えることを理解して頂ければと思います。

なお、村井先生には長期に渡り、私が設立したLPI-Japanの監事として無償で活躍して頂き、感謝しております。

6.個人の貢献者にとり、金銭的なメリット以上に重要なメリットとは?

上記ではオープンソースムーブメントがどのように金銭的なメリットを貢献側に提供するかをビジネスンモデルの観点から説明しました。

一方、金銭的メリットとは別の理由でLinuxを含むオープンソースソフトの開発に貢献する技術者は非常に多いです。その理由の一つは、自分が開発したソフトウエアの著作権を持つことが出来るからだと思います。例えば、多くの場合、企業に雇われたソフトウエア開発者は、自分が開発したソフトに対して著作権を持つことが出来ません。これは雇用主側の採用条件に従業員が雇用主の依頼に基づいて開発するソフトウエアの著作権などの知財はすべて雇用主が持つことが明記されている場合が殆どだからです。しかし、小説や音楽などの世界では、自分の作品を出版社や音楽の配信企業経由で販売しても、自分の創作物に対する「著作権」を有します。一方、企業などで雇われたプログラマーの大半は自分の創作物にたいして著作権を持てません。小説家や作曲家と同様に、自分の創作能力を生かして素晴らしいソフトウエアを生み出す優秀なプログラマーの多くがこの不公平性に不満を感じます。

しかし、Linuxの場合、仮に私が提供した改善ソフトが採用されれば、Linuxのソースコードに私の名前が入るのみならず、私が著作権を有します。オープンソースムーブメントでは無償の貢献が前提ですので、私のプログラムがLinuxに組み込まれたからといって、Linux の開発を統括する団体であるLinux FoundationやLinus Torvalds氏からお金が払われるわけではありません。しかし、世界中で利用されるLinuxのほんの一部でも、自分が書いたソフトが使用され、そのソフトには自分の著作権があり、更に自分の名前がLinuxのソースコードに入るのを無上の喜びとする優秀な技術者が非常に多いのは事実です。多分この喜びを求めてLinuxをはじめとする多くのオープンソースソフト(OSS)の改善活動に参加する技術者数の方が金銭的なメリットを求める技術者数より遥かに多いと思います。

山口周氏は前述した著書の中で、「経済性から人間性」への転換が今後は重要と書かれていますが、無償でLinuxの改善に貢献する優秀な技術者たちは金銭的欲望による活動ではなく、上記したような人間性に基づく行動をしているとも言えます。これは、映画の制作にもあてはまります。映画の最後に、制作に関与した人たちの名前や企業名が表示されるのは皆様もご存じだと思います。しかし、映画の制作に貢献した全員ではなく一部の人達の名前が映画の最後に表示(credit表記)されるのが業界の慣習のようです。

アップルの創業者であったスティーブ・ジョブズ氏は、自分がアップルの社長として招聘したスカリー氏により、アップルから追放されたことがあります。この追放されていた間、ジョブス氏は、映画「Toy Story」をフルCGで製作したPixer Animation Studiosの社長をしていました。しかし、この映画の配給権はディズニーが独占的に持っており、デイズニーは映画の最後に流れるクレジット表記にどのレベルの人を入れるのかに関しても強い権限を持っていました。そこで、Toy Storyの制作者達はジョブス氏に製作者全員の氏名がクレジット表記されることを強く要望します。このことを通じてジョブス氏は、映画の制作に参加したクリエータ達は、自分の名前が映画の最後に流れるクレジット表記されることが、「金銭的な価値とは別の意味で」重要であることを理解します。その結果、彼は、ディズニーと繰り返し交渉し、映画の制作に参加した全ての人達の名前がクレジット表記されることに成功しました。(上記のことはジョブス氏と共にPixarを上場することに成功した当時PixarのCFO (Chief Financial Officer)であったLawrence Levy氏の著書 「 To Pixar and Beyond」で詳しく書かれています。)

7.オープンソースソフトがセキュリティーの観点で強い理由

「ソフトの中身(ソースコード)を全てインターネットなどでオープンにするオープンソースソフト(OSS)はセキュリティーの観点で脆弱ではないか?」との質問を受けることが時々あります。実際は、下記のような理由からオープンソースソフトの方がクローズドソースソフトより外部からの侵入に強いITシステムの構築が可能です。

  1. オープンソースソフトは中身が全てオープンであるが故に、セキュリティー対策の観点でも自社が望むようにセキュリティ対策を強化するようにLinuxを改変することが可能です。そして、改変したLinuxを自社のみで使用する場合は、変更した部分を秘密にすることも可能です。セキュリティ対策はセキュリティーレベルを高くすればするほどコンピュータの処理速度が遅くなります。従って、自社の目的に合わせたセキュリティー対策をとることが、オープンソースのLinuxならば出来ます。しかし、Windowsの様にソフトの中身が公開されていないソフトでは上記のようなことは出来ません。
  2. 現在我々がインターネット経由で金銭の取引をする場合に使用される暗号化技術は、その暗号化の仕組みがオープンにされています。例えば、ビットコインのような暗号通貨の取引はブロックチェインと呼ばれる技術を利用しています。このブロックチェインの仕組みも完全にオープンにされています。重要な点は、暗号化の仕組みや、ビットコインのような暗号通貨もその仕組みが全てオープンにされているが故に世界中のセキュリティーの専門家が仕組みを調べて安全であることを証明することが出来ます。

上記のようなこともオープンソースムーブメントが生み出す新たな価値観と言えます。

8.AIとオープンソースムーブメント

最近、マスメディアが頻繁に取り上げる話題の一つはChatGPTに代表されるAI(人工知能)です。書店にもChatGPTの使用法に関する書籍が多数並んでいます。そして、マスメディアのAIの取り扱い方は大別するとChatGPTのような生成AIが見せる驚くべき性能かAIに対する恐怖のいずれかです。

そこで、オープンソースムーブメントの観点からAIの過去、現在そして将来について私の考えを述べてみます。

IT技術の観点からArtificial Intelligence (AI)と言う表現を初めて使用したのは元MITの教授だったジョン・マッカーシー氏です。彼は1958年から、第一次AIブームの時代とも言われる1960年代にかけてAIで頻繁に利用されるLISPと呼ばれる言語をオープンソース方式で開発しました。そして、後に説明する、私が勤務していた、米国のコンピュータメーカ、Digital Equipment Corporation ( DEC)のユーザ会であるDECUSにソースコードと共に登録しました。

John McCarthy氏

このオープンソース化されたLISPを利用してXerox社を含む多くの企業や研究所がLISPの派生版を作成しました。 そしてXerox社などはLISPを効率よく処理できるLISPマシン等と呼ばれるコンピュータを開発・販売したのです。これらのコンピュータは「エキスパートシステム」と呼ばれるAI手法を高速に処理する目的で開発・販売されました。

そして1980年代はLISPやProlog言語を利用したエキスパートシステムAI技術による第2次AIブームを引き起こしました。当時の通産省(現在の経済産業省)は約570億円を投入して「第五世代コンピュータプロジェクト」と呼ばれるプロジェクトを立ち上げました。このプロジェクトには富士通、日立、三菱電機なども参加し、多くのDECのコンピュータをオープンソース化されていたLISPコンパイラーと共に購入したのです。
この第2次AIブームの時も、当時のマスコミは現在と同様に、AIの素晴らしさとAIは多くの人の仕事を奪う恐ろしい技術との観点で報道しました。

そして現在は、第3次AIブームと呼ばれる時代です。この第3次AIブームの特徴は、専門的になりますが、インターネット上の膨大なデジタル情報をコンピュータが自動的に読み込み、ニューラルネットと呼ばれる技術を利用して、情報を抽出し、求められる出力を出す生成AI技術です。ChatGPTは生成AI技術を利用した典型的なAIシステムです。ChatGPTはOpenAI社により開発されました。社名にOpenという単語が含まれていることからも想像できるように、OpenAI社は多くのソフトウエアをオープンソースにし、オープンソースムーブメントによりAI技術の向上を目指したと創業者の一人はYouTubeで述べています。しかし、自分たちの夢を実現するには1兆円以上必要であることから、マイクロソフトから一兆円以上の資金を得ることになりました。しかし、マイクロソフトから資金を得てから、OpenA社がリリースされるオープンソースソフトウエア数は急激に減ったと報じられています。

一方、今年の5月にGoogleの技術者が社内の幹部向けに書いたとされるメールが外部に流失しました。
そのメールの表題は”We Have No Moat, And Neither Does OpenAI”です。Moatは敵の攻撃から守るためのお堀です。つまりこのメールは、「GoogleもOpenAIも敵の攻撃から身を守るお堀を有していない」ことを指摘した内容です。なお、OpenAI社の幹部の大半は元Googleに居た人達です。そして、このメールで指摘するGoogle及びOpenAI社の敵はオープンソースのコミュニティー活動です。実はMeta (旧Facebook)は自社開発した、ChatGPTと同様な能力を有するソフト(LlaMa)を2023年の2月にオープンソースとしてリリースしています。このソフトがオープンソースムーブメントにより改善され、現在はChatGPTの92%近くの性能を有すると上記のメールは指摘しています。そして、このメールの作者はGoogleもChatGPTもオープンソースコミュニティーと連携する必要性を訴えています。 PC以外の分野では、オープンソースのLinuxにクローズドソースのWindowsが負けたことと同様のことがAIの分野でも起きるとこのメールの作者は危惧したわけです。

ここまで読んで頂いて、AIの世界においても、1950年代からオープンソースムーブメントが牽引してきたことをご理解頂けると思います。
現在、AIのみならず、先端IT技術開発の分野の殆どの技術開発はオープンソースムーブメントで行われていることを我々IT技術者は理解することが重要です。

9.マイクロソフトの変身

マイクロソフト社は、Windowsを開発し、その中身(ソースコード)を秘密にして、Windowsの使用権(ライセンス)を有償で販売するビジネスモデルで世界最大のソフトウエア企業になりました。

しかし現在、PCの世界ではWindowsが圧倒的なシェアを有しますが、企業の基幹性システムやインタネットサーバ等ではオープンソースムーブメントで開発されたLinuxの方が多く利用されています。また、コンピュータ技術の最高峰である、スパコンの分野ではLinuxのシェアが100%です。

スーパーコンピュータで使用されるOS

Google, Amazon, Meta (旧FacebookやX(旧Twitter)などのITシステムはLinux等のOSSで稼働しています。三菱UFJ銀行、みずほ銀行、東京証券取引所などの金融企業の基幹システムもLinuxで稼働しています。

そして驚くことにマイクロソフトも現在は彼らが提供するクラウドサービスAzure上でLinuxが最も多く利用されていることを宣伝しています。そしてマイクロソフトはLinux等のOSSの普及団体であるLinux Foundationのプラチメンバーにもなりました。

Linux Foundationのプラチナメンバー

マイクロソフトの創設者であるビル・ゲーツ氏と2代目の社長であったスティーブ・バルマー氏は、「Linuxはソフトウエア業界にとって癌だと」述べていました。しかし、3代目の社長として就任したサタヤ・ナデラ氏は、「Microsoft really loves Linux.」と宣伝し始めてIT業界を驚かしました。

Microsoft really does love Linux

ビル・ゲーツ氏とマイクロソフトを設立したポール・アレン氏がマイクロソフトを退職した後に出版した「Paul Allen IDEA MAN」でアレン氏は携帯電話の市場において、Googleはアンドロイドをオープンソースにし無償で提供したのことに対して、Windowsの使用権を有料で販売するビジネスモデルは勝てなかったと書かれています。またアレン氏は、オープンソース方式のアンドロイドは6カ月以内で新しいバージョンが出るのに、マイクロソフトは、新しいバージョンを出すのに少なくとも2年かかったとも記述しています。

マイクロソフトとインテルが互いに手を取り合って世界にPCを普及させた功績は高く評価されるべきだと思います。しかし、多くの技術者を採用し、クローズドソース方式でWindowsを開発し、その使用権(ライセンス)を有料で販売するビジネスモデルは、「オープンソースムーブメントが創りだした新たなビジネスモデル」には逆らうことが出来ないことを示した良い事例だと思います。

このような時代の流れを反映して、マイクロソフトはOpenAI社に1兆円以上の資金を提供し、ChatGPT等、OpenAI社が開発したソフトの能力を自社製品に取り入れる方針を打ち出しています。また、マイクロソフトはメタ(旧フェイスブック)と連携して、メタがオープンソースにした生成AIソフトLlaMaを利用するビジネスも発表しています。このようにマイクロソフトがAIの分野でオープンソースソフトの利用を彼らのメニューに加える程にオープンソースムーブメントはマイクロソフトにとっても重要になった言えます。

実は、現在オープンソースムーブメントと呼ばれる、IT技術者やIT企業の活動形態は1960年代から米国の一部の企業により、自社が設立したNPOを利用して行われていました。従って、オープンソースムーブメントの考えは1960年代から米国のIT企業の一部では存在しました。そして、ビジネスの観点での有効性も証明されていました。このことを次に私の経験に基づいて説明します。

10.米国のIT企業が設立したNPOとオープンソースムーブメントの関係

株式会社は会社の成長に必要な資金を、自社株を購入してくれる株主から得ることが出来ます。これは資本主義の国々の企業が積極的に採用した重要なビジネスモデルと言えます。そして、米国では多額の先行投資が必要なIT企業の多くが上場し、大きく成長しました。

しかし、上場した株式会社は株主に金銭的なリターンを提供する必要があります。そのためには自社株の株価を株主が購入した時よりも高くする必要があります。株主はある特定の日に株を購入するわけではありませんので、株主に金銭的なリターンを提供するには継続的に株価を上げて行く必要があります。また、株主に配当金を払う必要もあります。このようなことを実現するには、自社の売上と利益を、毎年四半期ごとに前年同期比で増加させてゆく必要があります。上場企業で大きく成長出来た企業の経営者達は上記のようなハードルを越えて成長出来たということが出来ます。

しかし、山口氏は著書で、G7国のGDP成長率が落ちてきている最大の理由は、資本主義国で利用されてきたビジネスモデルであまりにも多くの物が有り余るほどに生産され、値引き競争が激化する状況を起こしてしまったからだと書かれています。要するに資本主義方式で可能なことは既に達成されてしまい、これ以上の伸びは非常に難しい状況になったと言えます。

一方、組織の売上・利益の増加を組織の活動目的の主軸におかずして、世の中の諸々のニーズに応える組織形態の一つが非営利活動法人NPOと言えます。そして、前記したオープンソースムーブメントの中核団体の大多数は非営利活動法人(NPO)です。米国では、1960年代から、成功した上場IT企業の一部はNPOを設立し、そこで現在我々がオープンソースムーブメントと呼ぶ活動を起こし、その活動を通じてIT技術者の育成などに貢献すると共にビジネスメリットも得ることが出来ました。その事例を幾つかの米国のIT企業について説明します。

Digital Equipment Corporation (DEC)が設立したNPO: DECUS

DECは私が最初に勤務した会社であり、オープンソースムーブメントに深くかかわっていますので、少し詳しく説明します。

私は、1969年に米国のボストン郊外に本社を構えるDEC (Digital Equipment Corporation)に就職しました。正確にはDEC日本支社に入社したのですがすぐに米国本社に転勤させられました。DECに私が入社した頃のコンピュータの利用形態は、コンピュータルームに鎮座する大型機で全ての業務を集中処理する時代でした。この大型集中処理の世界では、IBMが断トツで、世界最大のコンピュータメーカでした。当時のIBMは独自に開発したコンピュータ、独自開発のOSやデータマネジメントソフト、そしてコンピュータの周辺機器も独自開発した製品のみをOSが扱えるようにするなどで、顧客をIBMの世界に閉じ込める戦略で大成功していた時代です。

一方、私が最初に勤務したDECは、大型機・集中処理方式とは180度逆の分散処理方式を提唱した会社です。DECは自社が製造販売するミニコンと呼ばれる小型機を、コンピュータが必要な所に設置し、それらを必要に応じてネットワークで結合する、分散処理方式(Distributed Computing Style)を世の中に広めた会社でした。この分散処理方式の考えが現在のインターネットの基盤になっています。このDECが提唱したコンピューティングスタイルは、世界中の研究者、教育機関や研究所に受け入れられ、DECのコンピュータは飛ぶように売れました。DECは色々な機器とコンピュータをオンラインで接続できるように、インタフェースの仕様をオープンにしました。その結果、DECのミニコン向けの周辺機器を製造・販売する企業が急増したのです。そして、DECの利用者がアプリケーションソフトを開発するのに必要なソフト群もDECは無償で提供しました。

さらに、DECはDECUS (Digital Equipment Computer User Society)と呼ばれる、DECのユーザ会をNPOとして設立したのです。そしてDECのユーザー達が開発したソフトをDECUSに無償でソースコード付きで提供すれば、DECUSはソフトのコピーに掛かる費用のみで、登録されたソフトを無償で希望者に提供するようにしました。これはまさに現在我々がオープンソースムーブメントと呼ぶ方式と全く同じです。インターネットが世界に普及し始めたのは1990年頃からです。そのインターネットを利用してLinuxの開発を、当時ヘルシンキ大学の学生だったLinus Torvalds氏がオープンソース方式で始めたのが1991年です。ちなみにLinus Torvalds氏はDECのコンピュータを利用してLinuxの開発を行いました。

私がDECに入社したのはインターネットが普及する約20年前ですが、既にDECUSが設立され、多くの研究者や企業間でソースコード付きのソフトが交換され、DECUSが主催する会議では開発者達がDECUSに登録されたソフトをどのように改善したのか、またどのように改善すべきなのか意見交換をしていたのです。

当時の私は、DECUSのメンバー達が自分たちが苦労して開発したソフトをソースコード付きで、しかも無償で提供することの価値が良く理解出来ませんでした。更に、私が驚いたのはこのDECUSに登録されていたソフトの数と品質の高さでした。例えば、現在我々が利用しているLinuxやWindows等のOSはUNIXと呼ばれるOSがベースになっています。このUNIXは米国のベル研究所に勤務していた技術者たちがDECのコンピュータを利用して開発し、オープンソースにし、確かDECUSに登録されていたと思います。私は東大の大型計算機センターの責任者であった故石田晴久教授がDECのコンピュータをオープンソースのUNIXと共に購入して下さったのを今でもよく覚えています。なお、故石田晴久教授にはLPI-Japanの初代幹事になって頂き、色々な面で私を指導していただきました。

また、AIソフトの開発言語として有名なLISPもMITのAI研究者であったジョン・マッカーシー博士らがDECのコンピュータを利用して1960年にオープンソース方式で開発し、DECUSに登録されました。この頃はまだインターネットが存在しませんでしたので、DECUSに提供されたソフトは磁気テープに保存された形で授受がされていました。このような活動が現在インターネットを利用したオープンソース方式でのソフトウエア開発を行う基盤になったと私は思います。

このNPOであるDECUSのお陰でDECは下記のようなビジネスでのメリットを得ることが出来ました。

  1. 膨大な数のDECコンピュータ向けのアプリケーションソフトが無償で開発され、DECのコンピュータ販売に大きく貢献しました。
  2. DECUSのメンバー達が、結果として、DECファンになり、DECに入社したり、DECのコンピュータの優秀性を宣伝してくれました。日本の研究者たちがDECのコンピュータを購入してくれた理由の一つは、DECのコンピュータを利用した研究論文の方が他社のコンピュータを利用する場合より、欧米で論文の通りが良いからと説明してくれました。研究者の間でDECのコンピュータが高い評価を得ることが出来た理由の一つは、DECUSの活動が世界の研究者間で高く評価されていたことによります。

このようにDECには自社製品のユーザ会「DECUS」をNPOとして設立し 、そこで現在オープンソースムーブメントと呼ばれる活動を組織的に広めた功績があります。

Silicon Graphics Inc. (SGI)が設立したNPO: OpenGL

私が勤務した2番目の企業は3次元グラフィックス(3D Graphics)の分野で世界最大の企業に成長したSGIでした。人間が見る世界は全て3次元であるが故に3DGraphics技術が利用される分野は非常に幅広いです。映画の制作やゲームソフトの制作などのエンターテインメントの分野は勿論、自動車業界をはじめとする製造業、医療業界や種々の研究でも3D技術が利用されています。最近話題のメタバースでも3D技術は不可欠です。

それ故に、3次元グラフィックスに特化したSGIもDEC同様に急成長しました。そしてSGIは3Dグラフィックスソフトの開発を容易にするAPI (Application Program Interface)の仕様をオープンソース方式で開発するための組織「OpenGL」をNPOとして設立しました。3Dグラフィックスの分野には多くのライブラリーと呼ばれるソフトがあります。SGIは、これらのライブラリーがSGIのコンピュータ上のみならず数多くのコンピュータやOSの上で利用できるようにすることで3D市場が大きくなることが、自社の成長に繋がると考えたのです。そこでSGIは、ライブラリー間やライブラリーとOS間のデータのやりとりをOpenGL組織を通じて標準化することを行ったのです。このOpenGLの活動には、色々な企業、研究機関そして3Dグラフィックスの専門家が参加し、3Dグラフィックス技術と3D市場の開発に大きく貢献しました。

そしてSGIは自社が設立したNPO:OpenGLの活動を通じて、3Dグラフィクスの世界で必要とされるグラフィックス性能を把握し、その性能を満たすグラフィックスエンジンを他社に先駆けて開発・製造することが可能になりました。これも「無償の貢献」や「ボランタリー活動」と自社のビジネスモデルを巧く連携させた良い事例だと思います。

APPLE社のオープンソースムーブメント

APPLE社が設立したNPOのことはあまり良く分かりませんが、Appleの創業者である、スティーブ・ジョブス氏はオープンソースムーブメントを自社のビジネスモデルに巧みに生かすことが出来た人です。例えば、アップルのブラウザーであるサファリはOSSのKonquerorを基に開発されました。そして、スティーブ・ジョブス氏はサファリの中核部分であるWebkitをオープンソースにしています。またMacOSの中核にもオープンソースソフトを利用しています。また、スティーブ・ジョブス氏はiPhoneやiPadの数万のアプリソフト開発を自社で開発費用を負担せず、多くのアプリ開発者(企業)が無償で能動的に開発する方法を生み出しました。現在でもAPPLEは多くのオープンソースソフトの開発に深く関与しており、その様子は下記のサイトを見ると良く分かります。

https://opensource.apple.com/projects/

このように先見性のある米国のIT企業の経営者は相当以前からオープンソースムーブメントとNPOを非常に巧みに利用して自社の成長に役立てていました。このことを日本のIT業界の経営者とIT技術者は良く理解することが重要だと思います。

11.今後日本では、オープンソースムーブメントとNPOが非常に重要になる。

前記しましたように、オープンソースムーブメントで重要な役割を演じてきているのがNPOです。日本にとり、NPOの重要性は今後ますます重要になると思いますので、このことについて説明します。

米国では国のGDPの約5%をNPOが生み出しています。

https://nonprofit.indiana.edu/our-focus/nonprofit-sector.html

ちなみに、世界最強の米国の国防関連産業が生み出すGDPは米国全体のGDPの約3%ですので、米国のNPOが生み出す経済効果は米国の防衛産業より大きな、NPO Industryとも呼べる一大産業です。

日本でも、資本主義後のビジネスモデルとして、NPOが生み出す種々のオープンソースムーブメントで生まれるGDPが非常に大きくなると私は思います。

日本ではNPOを産業と捉える人は非常に限られた人です。また、企業や有能な人々の無償の貢献により成り立つオープンソースムーブメントを新たな「ビジネスモデル」と考えることが出来る人も限定的だと思います。しかし、私の経験から、オープンソースムーブメントとNPOの活動は間違いなく資本主義後の日本にとり重要になると思います。

12.米国が経験した、「知財を基盤とするビジネスモデル」 vs 「知財を持たないビジネスモデル」

前記したように、米国はインターネットの技術の開発を主導したのにもかかわらず知財を持たなかったが故に、国としてまた自国の企業が膨大な利益を得ることが出来ました。

以下に述べる理由から、米国は知財を有するビジネスモデルと知財を持たない二つのビジネスモデルを1960年代から20~30年間に実践した結果、知財を持たない方が遥かに多くのリターンを得ることが判ったと言えます。その理由はテレビです。

インターネットが世の中を大きく変えたようにTV技術も世の中を一変させました。このTV技術を開発したのは米国企業のRCAです。RCAは自社開発した技術で特許を取得し、TV機器の製造販売を開始しました。そして日本のSONY, Panasonic, 日立、サンヨー、シャープ、三菱電機など多くの日本企業は多額の特許料をRCAに払ってTVの生産・販売を世界規模で展開したのです。そして不思議なことに日本企業は、多額の特許料をRCAに払っていたにも関わらず、TV機器の販売では世界一になってしまいました。TV受信機のみならずTVの放送機器でもSONY, Panasonic、そして池上通信機等が世界を席巻したのです。その理由は、日本での製造コストが当時は非常に安かったこともありますが、TV技術の改善に日本企業が強かったからです。勿論、米国でもRCAのみならず多くの企業がTVの製造販売を行いましたが、徐々に日本企業の製品を自社ブランドで販売するビジネスモデルに変えざるを得なくなりました。この経験で、米国政府は、自国企業が開発し特許を有するビジネスモデルでは、米国企業は短期間に国際競争に負けることがあることを理解したと思います。

同様なことは、日本企業にもあてはまります。日本は、1960年代から1980年代にかけてTV機器のビジネスで世界を席巻したのみならず、多くの物作りの分野で世界一と言われました。当時、日本は物作りに関連する多くの特許や知財を有していました。しかし、それらの知財の経済的な価値は、短期にまた簡単に中国や韓国そして台湾企業に無にされました。

一方、米国はインターネットで、その基盤技術開発を米国政府が牽引したにも関わらず、全ての知財をオープンソースにした結果、インターネットがソ連や中国のような米国と対峙する国でも利用され、長期に渡り莫大な利潤を米国企業が得ることになりました。

更に重要なことは、インターネットは米国のソフトパワーを強力にした事実です。ソフトパワーとは、自国の軍事力を使わず、自国の生活スタイルや文化を相手国に普及させることにより、相手国を自国の思うように動かすことが出来る「力」です。

現在、世界中でインターネット技術を使用したGAFAMがビジネスのやり方や文化の面で世界中に多大な影響を与えています。GAFAMのみならずNetflixのような米国企業も世界の文化を大きく変えていることは否定できません。

私は日本政府や企業が、上記したような、「オープンソースムーブメントが創り出す新たなビジネスモデル」で日本の成長を再現することを真剣に考える必要があると思います。そして、当然のことながら、我々IT技術者も同様です。

13.LPI-Japanを非営利団体(NPO)で設立した理由

私は、上記の様な理由から、2000年に、オープンソースソフトの普及とオープンソース技術者の育成を目的として、LPI-Japanを会社組織ではなく特定非営利活動法人として東京都に申請し、許可を得て設立しました。

そして、オープンソースムーブメントの考えをベースに組織運営をすることで、富士通、NECや日立からの理事の皆様、多くのIT技術者、IT企業、教育機関、そして優秀な事務局員の協力を得ることが出来ました。その結果として、OSSの世界では認定試験の受験者数と認定者数の数でLPI-Japanが世界最大になることが出来ました。

14.Distributed Autonomous Organization (DAO) とオープンソースムーブメント

よく話題になるビットコイン等の暗号通貨はブロックチェインと呼ばれるオープンソースの技術を利用して、銀行等の金融機関を経由せずして世界の多くの国々の暗号通貨利用者と金銭のやり取りを可能にしました。これは暗号通貨がある特定の国に管理されるのではなく、ビットコインの使用者達により管理されている通貨故に可能なことです。

皆さんご承知の通り、銀行は国の許可業務であり、銀行を通じて国の通貨政策をコントロールできる中央集権型組織の一部と考えることが出来ます。しかし、ビットコイン等の暗号通貨はある特定の組織が中央集権的にコントロール出来ない通貨です。このような組織形態を分散型自立組織(DAO: Distributed Autonomous Organization)と呼びます。

実は、オーブンソース方式で開発されたインターネットの運営に関しても特定の国が集中コントロールすることが出来ません。技術的にもインターネットの制御は手中管理ではなく分散処理で、DAOの考えにより管理されていると言えます。冒頭に述べたようにインターネットは万が一米国がソ連からミサイル攻撃を受けても全米のネットワークが停止することがないネットワークの構築を目的として開発したARPANETの基盤技術を利用しています。ロシアがウクライナをいくら爆撃しても、ウクライナの国内・国外の通信が維持できているのは、米国国防省がARPANETに期待した性能をインターネットが十分に満たしていることを証明しています。

Windowsはマイクロソフトが開発し、その知財を秘密にし、Windowsの使用権のみをライセンスとして販売する中央集権型のビジネスモデルです。一方、Linuxは、既に説明したように、オープンソースムーブメントにより開発されたソフトであり、特定の国や組織がその利用法に関して中央集権的に管理することは出来ません。

また、Linuxの開発はLinux Foundationに所属するLinus Torvalds氏の許可を得なければならないといった制約は一切ありません。誰でも自分のバージョンのLinuxを開発することが出来ます。要するに、インターネットやLinuxの開発を進めたオープンソースムーブメントはDAO型の組織形態を目指して開発された技術と言えます。それ故に、インターネット上で開発されたビットコインのような暗号通貨の世界やメタバースの世界も分散型自立組織(DAO)が活躍出来る世界を目指して開発されました。

この事実は企業のみならず国の政策にも多大な影響を与えます。例えば、ロシアがウクライナに侵攻したことに関連して、日本政府はビットコイン等の暗号通貨の運用に関して種々の制約を設けました。しかし、中央集権型の管理や規制はDAOが目指す理念と180度逆故に、政府の規制は殆ど実効性がありません。同様に最近頻繁に報道される、生成AIに関する政府の規制案も、殆ど実効性がないと思います。前述したように、既にChatGPTと同等の性能を有するオープンソースの生成AIソフトがリリースされています。DAOの思想に基ずいて開蓮されるオープンソースの生成AIソフトの使用に関して、政府が規制を設けても今後出てくるオープンソースの生成AIを利用した多くのソフトの全てを政府が検査することは技術的に不可能だと思います。

むしろ日本政府が推し進めるべきことはオープンソース化された生成AIソフトを改善する貢献の競争で日本・日本企業・教育機関・各種研究所が最大の貢献者になれるように、最大の支援をするべきだと思います。要するに政府が重要視すべきことは、生成AIの分野で「オープンソースムーブメントが新たに創り出すビジネスモデル」を数多く生み出せるようにする支援策だと感じます。

ここ20年間に中国や韓国はインターネットを始めとするIT技術の利用の分野で日本を追い越すまでになりました。その最大の理由は、韓国政府や中国政府は国の制作としてオープンソースソフトの利用を促進することで短期に日本を追い越したと思います。中国政府は当然のことながら政治的に対峙する米国の企業が開発したソフトが中国政府や中国企業で利用されるのは国防の観点からも危険と判断し、国の政策として中国国内におけるオープンソースソフトの普及を推し進めました。これが中国がIT技術の面で急伸出来た大きな要因の一つです。

一方、米国のスマートパワー傘下の日本政府は、Windowsを始めとする米国企業のソフトや米国企業のサービスの普及をごく自然に受け入れる傾向が強いと思います。そして、私がここに書いた「オープンソースムーブメントが生み出す新たなビジネスモデル」の重要性を理解せずに現在に至っていると感じます。しかし、資本主義での成長を果たした現在の米国を躍動させている原動力は、ここで述べたような「オープンソースムーブメントが創り出した新たなビジネスモデル」です。その事実からも、日本の資本主義後の新たなビジネスモデルは「オープンソースムーブメント」で築かれる必要があると考えて間違いないと思います。

最後に私はこの寄稿文の読者であるIT技術者皆様がここに記述した「オープンソースムーブメントが創り出す新たなビジネスモデル」を理解されて素晴らしいキャリアを築かれることを期待します。

この記事をENGINEER.CLUBに掲載して下さることを提案して下さった株式会社ボールドの福井克明取締役に感謝の意を表します。

]]>
https://www.bold.ne.jp/engineer-club/open-source-movement/feed 0
「Microsoft Certified Azure Security Engineer Associate」資格取得に向けて https://www.bold.ne.jp/engineer-club/microsoft-certified-azure-security-engineer-associate https://www.bold.ne.jp/engineer-club/microsoft-certified-azure-security-engineer-associate#respond Thu, 21 Dec 2023 04:00:10 +0000 https://www.bold.ne.jp/engineer-club/?p=4212 近年、サーバーエンジニアであれば、誰もが耳にする「クラウド」。クラウドサービスにおいて、Microsoft 社が提供する「Microsoft Azure」に携わっている方も多いかと思います。また、「Microsoft Azure」に関連する認定試験も存在し、「難易度:中級」かつ「Azureのセキュリティ機能全般」を問われる認定資格が「Microsoft Certified Azure Security Engineer Associate」となります。筆者も20236月にこの資格試験を受験し、無事、合格できました。今回、この資格を取得するために取り組んだ「計画」→「実践」について記載いたしますので、皆さんの一助となれば幸いです。

1.Microsoft Certified Azure Security Engineer Associateとは

1-1.本資格概要

Microsoft Azure各項目におけるセキュリティ機能全般を問われる資格となります。例として各種ID(アカウント)及びパスワード、リソース(仮想マシン、仮想ネットワーク、ストレージ等)へのアクセス権・監視等があります。

1-2.試験難易度

Microsoft Azure認定試験の中で「Associateレベル」として公開されており、「難易度:中級」に分類されます。尚、同レベルの代表的資格として「Microsoft Certified Azure Administrator Associate」がありますが、これと「Microsoft Certified Azure Security Engineer Associate」は試験構成及び難易度の感覚が非常に近いです。

初級 中級 上級
Microsoft Certified Azure Fundamentals Microsoft Certified Azure Administrator Associate Microsoft Certified Azure DevOps Engineer Expert
Microsoft Certified Azure Developer Associate
Microsoft Certified Azure Security Engineer Associate Microsoft Certified Azure Solutions Architect Expert

1-2.1 Microsoft Azure認定試験難易度

1-3.本資格取得におけるメリット

正直、本資格取得における絶対的なメリットはありません。企業で資格取得を推奨している、資格取得に伴い手当が支給される、他の資格と合わせて取得し、自身の努力・勤勉さをアピールすることが資格取得を目指す理由になると思います。また、本資格に関する知識・技術につきましても実務で充分、身につけることが可能です。

2.試験合格のために ~計画編~

2-1.受験日を先に決定

まず、受験日を先に決めてください。理由は、「学習を進めて行き、試験合格の自信が持ててから受験申し込みをしよう」というスタンスで学習を進めても受験予定日がどんどん先延ばし(場合によっては受験もせずに終了)となるからです。「受験日を先に決め、試験申し込みをなるべく早めに行う」が大切となります。これにより危機感・緊張感を持ち学習を進めることができます。

2-2.目標点数を設定

試験合格点が700(満点は1000)ですが、試験で何点(あるいは何割の回答正解率)を目指すか決めてください。理由は、例えば「850点」を目標点数として掲げると本試験において予想外の問題が出題されることを考慮し、「模擬試験で95%以上の正解率となるまで学習を繰り返す」等の対策を立てて学習を進めることができるためです。

2-3.参考書を選定

Microsoft Azure セキュリティ テクノロジ[AZ-500]合格教本」をお薦めします。理由は、試験に関する重要キーワードの具体的な説明や強調表示、図表による解説等、試験に関する重要な情報が理解しやすく整理され記載されているためです。

 

2-4.本試験対策(模擬試験を選定)

Udemy」より「AZ-500 Azure Security Technologies 模擬問題集」を強くお薦めします。理由は、有料ですが、1度購入すれば、無期限で繰り返し学習できること、本試験に類似した問題が多数出題されること、各問題の解説が丁寧であるため、この問題で繰り返し学習し、解説まできちんと理解できれば本試験も確実に合格できる内容だからです。また、筆者がMicrosoft Azure認定試験初級者向け資格である「Microsoft Certified Azure Fundamentals」及び中級者向け資格の1つである「Microsoft Certified Azure Administrator Associate」を取得した時も「Udemy」の模擬問題集を選び合格できた実績もあります。

・AZ-500 Azure Security Technologies 模擬問題集

https://www.udemy.com/course/az-500-azure-security-technologies/

2-5.1日あたりの学習時間を決定

「毎日最低30分以上(毎日1時間以上を推奨)学習」を目標としてください。理由は、本資格の試験問題は「暗記・理解」を求めるオーソドックスな試験だからです。細かい項目を多数、暗記・理解する必要がありますが、毎日コツコツと学習することで確実に身につけることができます。

3.試験合格のために ~実践編~

3-1.参考書を繰り返し(最低5回以上)読み込む

2-3. 参考書を選定」で紹介した繰り返し(最低5回以上)読み込んでください。理由は、「2-5. 1日あたりの学習時間を決定」にも記載しておりますが、本資格の試験問題が「暗記・理解」を求めるタイプであるためです。反復学習が合格への近道となりますので、これを心がけてください。

3-2.Udemyの模擬試験で正答率100%を目指す

2-4. 本試験を意識した対策(模擬試験を選定)」で紹介した「Udemy」による模擬試験で正答率100%を目指してください。また、模擬試験の解説もきちんと理解してください。理由は、これを達成することで本試験の40%50%をカバーできるためです。また、金銭面及び学習時間確保に余裕がある方は「Udemy」の「AZ-104:Microsoft Azure Administrator模擬試験問題集」を学習することをお薦めします。理由は、こちらと「Microsoft Certified Azure Security Engineer Associate」本試験の問題形式が非常に近いこと、「Microsoft Certified Azure Administrator Associate」の知識も「Microsoft Certified Azure Security Engineer Associate」資格取得に活かせるためです。

 ・AZ-104:Microsoft Azure Administrator模擬試験問題集

https://www.udemy.com/course/az-104azure-administrator-associate/

3-3.総仕上げ

模擬試験での学習をメインとし、不明点・知識不足等について参考書で確認という形で進めてください。理由は、総仕上げの段階では模擬試験による学習をメインとしたほうが、本試験に対するイメージや本試験前のモチベーションを保つうえでメリットが高いからです。

4.試験合格のために ~試験直前及び試験当日~

4-1.試験直前に確認すべきこと

(1)試験詳細について

本試験の問題形式(3フェーズ存在)及びルールを把握しておいてください。理由は、ケアレスミスによる減点を回避するためです。問題形式は以下の通りです。

  • 問題文に対して正しい答えを1つまたは複数選択する形式。
  • 問題文の内容正しいか否か「はい」か「いいえ」で回答する形式。
  • 長文読解(架空企業のケーススタディに関する問題)が示され、数問出題及び回答する形式。

注意点は、上記①及び③は次フェーズに進む前の回答見直し及び修正のみ実施できること、上記②については、回答見直し及び修正が一切行えないことの2点です。

(2)長文読解(架空企業のケーススタディに関する問題)について

もし、時間及び金銭的な余裕がある場合、「3-2. Udemyの模擬試験で正答率100%を目指す」で紹介した模擬試験(Udemy)AZ-104:Microsoft Azure Administrator模擬試験問題集」の長文読解(架空企業のケーススタディに関する問題)を確認することをお薦めします。理由は、「2-4. 本試験対策(模擬試験を選定)」で紹介した「AZ-500 Azure Security Technologies 模擬問題集」にはこのタイプの問題が用意されていないため、前者の長文読解問題の形式を把握し、試験当日の時間配分をシミュレーションできるためです(4-1. 試験直前に確認すべきこと – (1) 試験詳細について」で記載したことがより具体的にイメージできます)

(3)試験経験者のコメント、アドバイスを確認

インターネットで本試験経験者のコメント、アドバイスを試験直前に確認することをお薦めします。理由として経験者のコメント、アドバイスを確認することで、試験直前で再度、重点的に学習すべきことや試験当日に対する事前イメージが行えるためです。筆者がこれまで記載した内容以外の情報も多数あり、これから受験するにあたりプラスとなる情報が必ずあるはずです。

4-2.試験当日に注意すべきこと

「問題数と時間配分」に注意してください。理由は、「4-1. 試験直前に確認すべきこと – (1) 試験詳細について」で記載した各問題形式における問題数につきまして、多少変動があるためです。参考ですが、この項目で記載した問題形式①~③において、問題形式②、③はそれぞれ5問前後出題され、残りは全て問題形式①となります。この点を抑え、試験当日の時間配分をコントロールしてください(特に問題形式③の時間配分に注意してください)

5.さいごに

2-3. 参考書を選定」で紹介した以外の参考書がいくつかありますが、自身の好みに合う参考書を選んで頂いても問題無いです。ただし、参考書は1冊です。2冊以上の参考書で読み込みが浅くなるより、1冊の参考書で繰り返し学習することを心がけて頂くことが大切です。また、「2-4. 本試験対策(模擬試験を選定)」で紹介した模擬試験(Udemy)は強くお薦めしますが(3-2. Udemyの模擬試験で正答率100%を目指す」にも記載しておりますが、本試験40%50%をカバーできました)、より確実な合格を目指したい場合、もう1種類別の模擬試験を活用しても良いと思います。尚、参考書のみでは、本試験対策としてやや弱いため、あまりお薦めしません。筆者が本記事で紹介した参考書及び模擬試験がベストに近いと断言することはできませんが、「参考書及び模擬試験の両方で学習する」ことが本試験対策としてベストに近いはずです。学習における費用負担が少し多くなりますが、確実に資格を取得するため、ぜひ、この組み合わせで取り組んでください。

]]>
https://www.bold.ne.jp/engineer-club/microsoft-certified-azure-security-engineer-associate/feed 0
VBA Date関数 ~関数の解説 https://www.bold.ne.jp/engineer-club/vba-date https://www.bold.ne.jp/engineer-club/vba-date#respond Thu, 30 Nov 2023 13:00:55 +0000 https://www.bold.ne.jp/engineer-club/?p=4198 VBAで、システム日時を取得する方法は、複数あります。ここでは、「Date関数」について説明していきます。

1.Date関数について

1-1.Date関数とは

Date関数とは、実行時のシステム日付をDate型で取得します。

1-2.Date以外の日付関連の関数

システム日付を取得する関数は、NowTime等があります。

2.Date関数の使用例

2-1.基本的な使用例

Sub sample01()
    Dim d As Date
    
    '現時点の年月日を取得
    d = Date
    
    MsgBox d
End Sub

実行結果:

実行結果1

2-2.特殊な書き方をする場合

Format関数を使用すると、出力する形式を変更できます。

2-2-1.現時点の年月日を8桁で取得

Sub sample02()
    Dim d As Variant
    
    '現時点の年月日を8桁で取得
    d = Format(Date, "yyyymmdd")
    
    MsgBox d
End Sub

実行結果;

実行結果2

2-2-2.現時点の年月日を「yyyymmdd日」形式で取得

Sub sample03()
    Dim d As Variant
    
    '現時点の年月日を「yyyy年mm月dd日」形式で取得
    d = Format(Date, "yyyy年mm月dd日")
    
    MsgBox d
End Sub

実行結果;

実行結果3

2-2-3.現時点の年月日の一部を取得

Sub sample04()
    Dim d As Variant
    
    '現時点の年月のみ、月日のみを取得
    d = Format(Date, "yyyy年mm月") & vbCrLf & Format(Date, "mm月dd日")
    
    MsgBox d
End Sub

実行結果;

実行結果4

2-2-4.日付を比較する

Sub sample05()
    Dim d As Variant
    Dim dd As Variant
    
    '比較する日付を指定
    dd = CDate("2023/1/1")
    
    '日付を取得
    d = Date
    
    d = d - dd
    
    MsgBox d
End Sub

実行結果;

実行結果5

日付を比較した場合、差分の日数が取得できます。

3.最後に

日付を取得する方法は、上記以外にも複数あります。用途に合わせて、使用していってください。

]]>
https://www.bold.ne.jp/engineer-club/vba-date/feed 0
Linux初心者必見!LinuCレベル1に合格して現場で活躍しよう! https://www.bold.ne.jp/engineer-club/linuc-level-1 https://www.bold.ne.jp/engineer-club/linuc-level-1#respond Wed, 22 Nov 2023 03:00:21 +0000 https://www.bold.ne.jp/engineer-club/?p=4184 「現場でLinuxを使っているので、しっかりスキルを身につけたい」「LinuCとLPICがあるようだが、どちらを受験したらいいのだろうか」以上のような思いを持っている方は、ぜひこの記事に目を通してみてください。筆者は2023年5月に受験し合格したので、LinuCの概要からおすすめする理由、また合格するために実施した対策について共有します。

以下、筆者が受験した際の試験結果レポートです。

LinuC101_レポート

LinuC102_レポート

1.LinuCとはどんな試験か

まずはLinuCの概要について説明します。

1-1.試験の概要

日本のNPO法人であるLPI-Japanが、LPICに変わる新しい試験として2018年3月から提供を開始したLinux技術者の認定試験です。クラウド時代においてIT技術者に求められる技術力を証明する試験であり、Linux技術を中心にクラウド・システムアーキテクチャ・オープンソースリテラシーも出題範囲としています。レベルは3段階に分けられており、レベル1から順番にステップアップしていく形式になっています。各レベルについては以下の通りです。

  • レベル1:仮想環境を含むLinuxシステムの基本操作とシステム管理ができる。
  • レベル2:仮想環境を含むLinuxのシステム設計/ネットワーク構築において、アーキテクチャに基づいた設計/導入/保守/問題解決ができる。
  • レベル3:OSの混在環境、セキュリティ、仮想化/高可用性という3つの分野において最高レベルの技術力を持っている。

1-2.試験方式・合格率

LinuCレベル1に認定されるためには、101試験と102試験の2つの試験に合格する必要があります。2つの試験を同時に受験する必要はなく、片方の試験に合格してから5年以内にもう片方の試験に合格すると、レベル1の認定を受けることができます。

各試験の方式は以下の通りです。

  • ・試験日程:通年
  • ・試験方式:コンピュータ上で実施するCBT方式
  • ・試験時間:85分(+アンケート回答時間5分)
  • ・問題数:約60問(選択問題またはキーボード入力問題)
  • ・合格ライン:65~75%程度
    試験時間85分で問題数約60問ということから、単純に計算すると1問あたり1分半弱の時間をかけることができます。キーボード入力が必要な問題もありますが、文章ではなくコマンドなどの文字列を入力する内容であるため、時間配分をあまり気にせずともある程度時間には余裕があります。合格ラインは65~75%程度とされているため、60問中45問以上正解すれば確実に合格できると考えて良いでしょう。

1-3.受験対象者

レベル1認定のための101試験/102試験を受験するための前提条件はないため、誰でも受験可能です。全てのIT技術者の基礎となる内容を扱っているため、IT技術者としてキャリアを積んでいこうと考えている方にぜひ受験をおすすめします。

1-4.試験の申込方法・受験料

まず以下2つを事前に用意し、次にピアソンVUEのWebページから試験の申し込みを行います。受験料は各試験16,500円(税込)です。

  • ・EDUCO-ID:LPI-Japanが管理している、認定試験の受験結果や認定履歴を確認するためのID。
  • ・ピアソンVUEアカウント:ピアソンVUEが管理している、受験予約のためのアカウント(アカウント発行には事前にEDUCO-IDの取得が必要)。

【ピアソンVUE Webページ(LinuC)】

https://www.pearsonvue.co.jp/Clients/LinuC.aspx

2.LPICよりLinuCをおすすめする理由

Linuxの資格試験としてはLPICも有名ですが、筆者が個人的にLinuCをおすすめする理由を説明します。

2-1.LPICの試験漏洩問題を改善した試験である

LPICは、オープンソース技術者の認定活動をする目的でLPI-Japanとカナダに拠点を構えるNPO法人Linux Professional Instituteが開発した試験です。しかしLPICは過去に試験問題の漏洩があり、その対策についての認識がLinux Professional InstituteとLPI-Japanの間で異なったことなどから、LPI-Japanは試験問題漏洩対策技術を取り入れた新しい試験としてLinuCを開発しました。

頑張って勉強して取得する資格ですから、スキルの証明としてより信頼のできる資格であることは受験者にとってメリットであると思います。

2-2.クラウド時代に合わせて出題範囲が改定されている

 LinuCは、日本のIT業界が期待するLinux技術者の育成に役立つような試験問題にするべく、実際に現場で働いているIT業界の専門家たちと協力して開発されています。2018年に試験が開始された際は混乱を避けるためにLPICと同様の出題範囲でしたが、2020年4月からはバージョン10.0として今求められているスキルに合わせて出題範囲が改定されました。具体的には、以下3つの観点で内容が追加されています。

  • 技術対象領域をクラウドを支える技術領域へ拡大
  • オープンソースのリテラシーの理解を追加
  • システムアーキテクチャの要素を導入

これからIT業界で活躍していこうと考えているエンジニアにとって、時代に合わせたスキルを身につけ、証明できることは非常に重要だと思います。

バージョンアップについては、以下公式の記事もぜひ読んでみてください。

https://linuc.org/about/202003.html

3.LinuCレベル1合格のために実施した勉強方法

筆者が受験前に実際に行った試験対策について説明します。目標点数は101試験/102試験でそれぞれ80%(48/60問)以上と設定し、受験日の約2ヶ月前から主に平日の業務後の2〜3時間を使って以下の流れで進めました。

3-1.教材の決定

まずは試験対策に使用する教材を翔泳社の「Linux教科書 LinuCレベル1」(いわゆるあずき本)としました。教材の選び方については、LPI-Japanの認定教材であれば内容に大きな差はないのでどの教材でも構わないと思います。実際に教材を開いてみて、自分がこれから勉強していく上で使いたいと思えたものを選ぶのが良いと思います。

「Linux教科書 LinuCレベル1」は大きく2部構成になっており、1〜6章が101試験、7〜13章が102試験の内容になっています。

  • 第1章 Linuxのインストールと仮想マシン・コンテナの利用
  • 第2章 ファイル・ディレクトリの操作と管理
  • 第3章 GNUとUnixのコマンド
  • 第4章 リポジトリとパッケージ管理
  • 第5章 ハードウェア、ディスク、パーティション、ファイルシステム
  • 第6章 101模擬試験
  • 第7章 シェルとシェルスクリプト
  • 第8章 ネットワークの基礎
  • 第9章 システム管理
  • 第10章 必須システムサービス
  • 第11章 セキュリティ
  • 第12章 オープンソースの文化
  • 第13章 102模擬試験

3-2.模擬問題で現状を把握

教材「Linux教科書 LinuCレベル1」で学習を始める前に第6章と第13章の模擬問題を解いて、自分が現状どのくらい得点できるのか、またどんな分野の知識が不足しているのかを把握しました。筆者の場合は101試験/102試験ともに正答率が20%ほどで、「第3章 GNUとUnixのコマンド」や「第7章 シェルとシェルスクリプト」の知識は業務での経験もあったためいくつか正解したものの、その他の範囲についてはほとんどわからない、という状態でした。そのため試験対策としては、1章ごとにじっくり時間をかけて理解を深めていくことにしました。

3-3.教材を読んで自分用メモを作成

現状の知識量を把握した後、「Linux教科書 LinuCレベル1」を読み始めました。具体的には、1章ごとに読んでは自分の中で内容を噛み砕きながら、簡単なメモにまとめていきました。自分なりに要点をまとめてできるだけコンパクトなメモにしようとしたのですが、出題範囲が広いため結果的にカンニングペーパーというよりはなかなかボリュームのあるメモが完成しました。それでも参考書を読み直すよりは自分のメモを見直す方が負担が量的にも(精神的にも)小さいためスムーズに内容を復習することができましたし、自分でどの部分の理解が足りないのかもわかりやすかったため、おすすめです。

ちなみにメモはどんな媒体でも良いと思いますが、自分が書きやすいかつ見直したくなるものがおすすめです。参考までに、筆者は普段Notionを使用してメモをとっています。見出しや箇条書きの他にコードブロックの埋め込みなどができるため、自分のPCでテスト実行したコードなどを簡単にコピペして残しておくことができます。またPCでもスマホでも編集・閲覧が可能なため、ちょっとした隙間時間や試験直前にさっと復習できる点が便利です。

3-4.Linux環境を用意し、コマンドを実際に実行して動きを確認する

勉強方法の中では、ここが1番ハードルの高い内容かと思います。既に自分のPCにLinux環境を用意していたり現場などで学習用に使用できる環境がある方は、ぜひそちらを使用してみてください。使えるLinuxの環境がない方は、面倒がらずに用意してみてください。Webを検索すると環境構築に関する技術ブログ記事が多く見つかります。慣れていない場合は一筋縄ではいかないかも知れませんが、エンジニアとして決して無駄な経験ではないと思いますので、少し時間をかけてやってみてください。筆者の場合は、プライベートでM1のMacbookを使用しているため、UTMという仮想化ソフトをインストールし、Ubuntuの仮想マシンを作成しました。

Linuxの環境が用意できたら、実際にコマンド操作を行って挙動を確認したり、各種設定ファイルの中身を確認してみました。参考書をただ読み進めるよりも理解が深まる上に記憶に残りやすいです。参考書を読み進めて自分用メモを作成するのと並行して、都度実行確認をしていくと良いと思います。

3-5.実践試験の模擬問題で途中経過を把握

「Linux教科書 LinuCレベル1」を一通り読み終わったところで、再び各部の最後の章である模擬問題を解いて自分の成長具合と苦手分野の確認をしました。筆者の場合、この確認作業が受験日1週間前と直前になってしまったのですが、正答率は101試験/102試験ともに83%(50/60問)でした。苦手分野については、特定の分野というよりは全体的に少しずつ間違えている状態だったため、一通り全体を見直していく必要があることがわかりました。

3-6.苦手部分を自分用メモと教材で復習

「Linux教科書 LinuCレベル1」を一通り読み終わった後に解いた模擬試験の結果をもとに、受験前の2週間は今までに作成してきた自分用メモを使って全体を復習していきました。模擬試験で間違えた部分や復習しながら疑問に思った部分については、適宜「Linux教科書 LinuCレベル1」を参照しながら自分用メモを更新しました。

3-7.試験当日

 試験当日は、自分用メモを一通り振り返ってから臨みました。LinuCは試験が2つに分かれているとはいえ試験範囲が広いので、ぜひ直前まで油断せず全ての内容を一通り復習することをおすすめします。

4.さいごに

受験を決めたときは、内容が予想以上にてんこ盛りで最初は面食らってしまったのですが、勉強を進めながらLinuxについてさらに興味を持つようになりました。ファイルシステムやプロセス、プロトコルについても知識を深めることができるので、コンピュータサイエンスの基礎として勉強をしていて楽しかったと感じています。

インフラ/開発エンジニア問わず、ぜひLinuCを通してLinuxの世界を覗いてみてください。

]]>
https://www.bold.ne.jp/engineer-club/linuc-level-1/feed 0
上級エンジニアを目指す方必携!応用情報技術者試験について徹底解説 https://www.bold.ne.jp/engineer-club/applied-information-engineer-examination https://www.bold.ne.jp/engineer-club/applied-information-engineer-examination#respond Wed, 15 Nov 2023 08:00:36 +0000 https://www.bold.ne.jp/engineer-club/?p=4180 応用情報技術者試験は、基本情報技術者試験の上位のレベルに位置付けられている資格試験です。基本情報技術者試験に合格した方を中心に、スキルアップやキャリアアップのために非常に多くのITエンジニアや学生が受験しています。資格取得の難易度は上がりますが、この資格を取得することにより、様々な分野の知識が定着して現場で活躍するエンジニアになれるので、とてもおすすめの資格です。筆者自身もこの資格の取得やその過程での勉強のおかげで、身に付けた知識を現場で応用して業務を遂行する力を伸ばせたと感じています。この記事では、応用情報技術者試験の受験を検討している方向けに、資格の概要や取得のメリット、勉強法を網羅的に解説します。

1.応用情報技術者試験の概要

まずは、応用情報技術者試験について、試験の方式やスケジュールといった概要を説明します。

1-1.応用情報技術者試験とは

応用情報技術者試験とは、情報処理推進機構(IPA)が主催しているIT分野の国家試験の1つです。IPAによると、対象者像を「ITを活用したサービス、製品、システム及びソフトウェアを作る人材に必要な応用的知識・技能をもち、高度IT人材としての方向性を確立した者」と定義されており、この資格取得を通じてITに関する様々な分野において基礎知識だけでなく応用的な知識や技術の習得を目指す資格となっています。この資格を取得しているエンジニアは、基礎からワンランク上のスキルを身に付けていることの客観的な証明となり、未取得のエンジニアと比べて保有スキルに対する期待値がかなり上がることになります。

参考:https://www.ipa.go.jp/shiken/kubun/ap.html

1-2.試験方式

応用情報技術者試験は、午前試験と午後試験の2つがあります。午前試験は4肢択一式の選択問題を80問、マークシートに回答します。午後試験は分野ごとに長文形式の大問が11問出題され、問一の「情報セキュリティ」の分野は必須回答で、残り4問を自由選択します。回答は記述式です。

1-3.出題範囲

出題範囲について説明します。午前問題については、テクノロジー系、マネジメント系、ストラテジー系の分野から満遍なく出題されます。テクノロジー系とは、プログラミングやネットワーク、データベースなどのIT技術に関する知識、マネジメント系はプロジェクトマネジメント、サービスマネジメント、システム監査といった管理系の知識、ストラテジー系は主に経営戦略や法務に関する知識です。IPAが掲載しているシラバスによると、下記のように非常に多岐にわたる分野が出題されます。

【テクノロジー系】

1.基礎理論
2.アルゴリズムとプログラミング
3.コンピュータ構成要素
4.システム構成要素
5.ソフトウェア
6.ハードウェア
7.ヒューマンインターフェイス
8.マルチメディア
9.データベース
10.ネットワーク
11.セキュリティ
12.システム開発技術
13.ソフトウェア開発管理技術

【マネジメント系】

14.プロジェクトマネジメント
15.サービスマネジメント
16.システム監査

【ストラテジー系】

17.システム戦略
18.システム企画
19.経営戦略マネジメント
20.技術戦略マネジメント
21.ビジネスインダストリ
22.企業活動
23.法務

午後問題の試験範囲は下記の範囲から11題出題されます。1-2試験方式で説明した通り、情報セキュリティについては必須です。

  1. 経営戦略に関すること
  2. 情報戦略に関すること
  3. 戦略立案・コンサルティングの技法に関すること
  4. システムアーキテクチャに関すること
  5. IT サービスマネジメントに関すること
  6. プロジェクトマネジメントに関すること
  7. ネットワークに関すること
  8. データベースに関すること
  9. 組込みシステム開発に関すること
  10. 情報システム開発に関すること
  11. プログラミングに関すること
  12. 情報セキュリティに関すること
  13. システム監査に関すること

それぞれの項目についての詳細な説明は省略するので、興味がある方はシラバスをご確認ください。

https://www.ipa.go.jp/shiken/syllabus/t6hhco0000004yy7-att/youkou_ver5_2.pdf

1-4.試験のスケジュールと、申し込み方法

試験のスケジュールは春期(4)と秋期(10)の年2回実施と決まっています。申し込み方法は、申し込みサイト(https://cbt-s.com/examinee/examination/pbt_aki)にて自分のアカウントを作成し、申込期間内に申し込む必要があります。

1-5.難易度及び勉強時間、合格率

応用情報技術者試験の難易度について、ITスキル標準(ITSS)によると、スキルレベルの7段階中レベル3にあたり、基本情報技術者試験の1ランク上で、高度なIT人材のレベルとして位置付けられています(https://www.ssug.jp/docs/isv/isvmap30.pdf)。超難関の試験とまでは言えませんが、少なくとも基本的な知識を身に付けている程度では合格は難しいです。合格率は毎年20%程度と言われています。勉強時間については、自身の得意不得意やIT業界経験によって変わりますが、筆者の場合(文系出身で新卒4年目で取得)では1日2~3時間程度の勉強を3か月間ほど続けたので、約250時間は勉強に費やしていました。

2.応用情報技術者試験の資格取得のメリット

ここからは、応用情報技術者試験の資格取得のメリットについて解説します。様々なITの分野に関する概念の理解することが求められるので、Javaなどのプログラミング系の資格と比べて一見効果がわかりにくいと感じる方もいるかと思います。しかし、様々な技術の根本を支える概念をしっかり理解できているか、またそれについて資格取得を通じて客観的に証明できているかが、業務でのパフォーマンスやキャリアにも大きく影響を与えます。次に説明する資格取得のメリットを理解して、受験のモチベーションを上げていただけたらと思います。

2-1.より現場で活かせる知識が身に付く

応用情報技術者試験に合格するには、午前問題を通じて基本的な概念を理解するとともに、それについて午後問題を通じてどのように活用するかを判断できるようになることが求められます。これは、設計書や仕様書の作成、プログラム開発、テストなどの実際の現場業務で行う思考プロセスにとても似ています。従って、知識の活かし方や、それを自力で考えて導き出すための思考力が身に付くので、基礎知識を覚えているだけの人よりも現場で活かせる知識が身に付いている状態になることができます。

2-2.スキルの客観的な証明となり、就職や転職、異動などに有利となる

どの資格にも言えることですが、応用情報技術者試験はハイレベルな国家資格であり、それを取得していることは客観的な評価において大きな差別化につながりやすいです。すでにITエンジニアとして業務に従事している人ならわかるかと思いますが、どの現場で働いても多かれ少なかれその現場で必要な技術のキャッチアップには全員取り組みます。今の仕事に全力で取り組むことはキャリアアップのための大前提になりますが、加えて資格取得を通じて自己研鑽における成果を保有している人は、してない人に比べて高い評価につながり、望むキャリアを手に入れるうえでとても有利に働きます。

2-3.有効期限はないため、一度取得したら再受験不要

IT業界に存在する様々なベンダー資格には有効期限があることが多く、期限が切れる度に資格を取得しなおすケースがあるかと思いますが、応用情報技術者試験についてはそのような有効期限はありません。そのため、合格してから何年経っても再受験に向けて再び同じ内容を勉強しなおすことは不要で、次のステップに集中し続けることができます。

3.応用情報技術者試験に向けたおすすめの教材

ここまで読んでいただいて受験を目指したいと思った方向けに、勉強を始めるにあたっておすすめの教材を3つほど紹介します。

3-1.キタミ式イラストIT塾 応用情報技術者

この教材は、応用情報技術者試験で出題される様々な分野についての説明を、筆者が知る限り一番細かく書かれており、読み込むことで基礎的な概念の理解につながります。しかも文字だけでなくイラストも交えた説明も多く記載されており、具体的な内容でありつつも直感的にわかりやすい構成になっています。過去問題を解きながらわからなかった箇所をこの教材を読み直して勉強することも有効です。

・キタミ式イラストIT塾 応用情報技術者

https://www.amazon.co.jp/キタミ式イラストIT応用情報技術者令和05きたみりゅうじ/dp/4297131889/ref=asc_df_4297131889/?tag=jpgo-22&linkCode=df0&hvadid=622955539433&hvpos=&hvnetw=g&hvrand=9998562008890758863&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009311&hvtargid=pla-1884997570946&psc=1&th=1&psc=1

3-2.応用情報技術者試験ドットコム

このサイトは、応用情報技術者試験の過去問題がすべて載っているWebサイトです。無料で閲覧可能で、「過去問道場」の機能を使えば表示された問題を解いて解説を読み込むという作業を無限に繰り返せます。表示される解説もわかりやすいので、電車の中でも午前問題の学習に有効活用することができます。

・応用情報技術者試験ドットコム

https://www.ap-siken.com/

3-3.応用情報技術者 午後問題の重点対策

こちらは、午後問題の対策に特化した教材です。出題内容や問題の解き方の説明、解答解説が非常に充実しており、内容理解が深まります。午後問題を解くには出題形式に対する慣れが必要ですが、この教材を解き進めればそれを身に付けることができます。

・応用情報技術者 午後問題の重点対策

https://www.amazon.co.jp/2023応用情報技術者午後問題の重点対策小口達夫/dp/4865752757/ref=pd_bxgy_img_sccl_1/357-1756910-9977957?pd_rd_w=k1PF0&content-id=amzn1.sym.bc57a5ab-9f02-4944-8c5c-9e1696e0d32c&pf_rd_p=bc57a5ab-9f02-4944-8c5c-9e1696e0d32c&pf_rd_r=FXKKFWX0QFD2V8Q3JBM2&pd_rd_wg=V9MTu&pd_rd_r=ccba787c-13ce-4039-8d82-4c91396c0e5a&pd_rd_i=4865752757&psc=1

4.応用情報技術者試験の勉強法(午前対策)

ここからは、応用情報技術者試験の午前問題の試験対策について解説します。午前問題の難易度は基本情報技術者試験と大きく差はありません。しかし、きっちりと理解度を上げていかないと合格することはなかなか難しいので、これから解説する内容をしっかり理解して学習に取り組んでいただければと思います。

4-1.分野ごとに満遍なく勉強する

午前問題に関しては、テクノロジー系の範囲が広いので必然的にテクノロジー系からの出題が多くなりますが、ピンポイントで特定の分野が突出して多く出題されるということは現状あまりないので、基本的には満遍なく勉強して理解度を上げるようにするのが望ましいです。そのうえで、自身の得意不得意に従ってどの分野に比重を置いて勉強するべきかを考えていきましょう。

4-2.丸暗記せず、しっかりと概念を理解する

午前問題は用語を覚えるだけで解ける問題もありますが、丸暗記はせずにしっかりと概念を理解するようにしましょう。そうでないと、午後問題でその用語に関する問題が出題されたら理解度が足りずに正解を導き出すことができなくなるからです。午前問題の内容をどれだけ理解しているかが午後問題の合否にもかかわるので、解説の熟読などを通して理解を深めるようにしましょう。

4-3.過去問題を徹底的に解く

午前問題においては、過去に出題された問題が試験本番でそのまま出題されるというケースが結構あります。従って、過去問題の徹底的な演習は試験対策として極めて有効なので、しっかりと演習を重ねて試験本番で確実に正解できるようにしましょう。繰り返しにはなりますが丸暗記は絶対にしないようにしてください。

5.応用情報技術者試験の勉強法(午後対策)

続いて、応用情報技術者試験の午後試験の対策について説明していきます。筆者の周りのエンジニアの中には、この午後試験をなかなか突破できずに不合格になってしまう方がとても多くいるので、少し気合を入れて学習に取り組むべき内容になります。しかし、しっかりと演習を重ねていけば必ず正答率を上げられるので、これから説明する内容を参考にして学習を進めていただければと思います。

5-1.勉強する分野はある程度絞る

既に述べた通り、午後問題は、「情報セキュリティ」の問題は必須選択ですので勉強も必然的にすることになりますが、それ以外は任意選択になりますので、全ての分野について勉強する必要はないです。むしろ、ある程度絞って勉強した方が効率的に学習を進められます。例えばですが、開発系のプロジェクトに従事しているかたは、「プログラミング」、「情報システム開発」、「組込みシステム開発」、インフラ系に従事している方であれば「ネットワーク」、「システムアーキテクチャ」、「データベース」あたりを優先して学習を進めたりするなど、自身が従事している業務や興味がある分野を重点的に学習して理解度を上げることがおすすめです。

5-2.過去問題を最低5年分は解く

午後問題は問題の形式に慣れているかがとても重要になってくるので、過去問題をできるだけ多く解いていくことがとても大切です。筆者の感覚的に、最低5年分は解かないとどの問題でも対応できるようにはなりにくいかと思います。慣れてくれば正答率も少しずつ上がっていくので、しっかりと演習を重ねていきましょう。

5-3.時間を測りながら問題を解く

午後問題の試験時間は150分間なので、1問あたり30分以内に解く必要があります。しかし、これがなかなか難しく、不合格になってしまった方の理由の1つに時間が足りなかったということが多く挙げられるので、常に時間を測りながら問題を解くようにしましょう。慣れてくれば、得意分野であれば20分前後で解けるようになるので、それを目安に学習に取り組むのがおすすめです。

5-4.納得するまで解説を熟読する

問題を解き終わったら、納得がいくまで問題を見直しながら解説を熟読する必要があります。見落としてはいけない問題文はどこかとか、求められている知識事項は何かとかを見極めるつもりで問題演習と解説の熟読を繰り返すことにより、少しずつ問題を解くことに慣れていきます。時間はかかりますが、着実に正答率を上げるためにもこれは丁寧に取り組んでいきましょう。

5-5.正答率が著しく低い場合は、午前問題を勉強し直す

問題を解いてみたら正答率が低く、難易度が高くて解説を読んでもよくわからないと感じる場合は、基礎の定着が甘い状態の可能性があります。そのような場合は、その分野の午前問題から勉強し直して再度基礎の定着を進めていきましょう。その際、基礎知識について自分で説明できるようになれば、午後問題も解きやすくなると思うので、意識して勉強に取り組んでみてください。

6.さいごに

今回は応用情報技術者試験について一通り解説しました。基礎知識のみでは合格は難しい試験であるため、難易度が高く感じることもあるかもしれませんが、この資格を取得出来たら自分の知識や思考力などを向上させて現場でのパフォーマンス向上につなげることができます。自分のスキルを伸ばしてキャリアを高めたい方はぜひチャレンジしてみてください。

]]>
https://www.bold.ne.jp/engineer-club/applied-information-engineer-examination/feed 0
【SQL】COUNTを使って件数を取得する方法 https://www.bold.ne.jp/engineer-club/sql-count https://www.bold.ne.jp/engineer-club/sql-count#respond Thu, 12 Oct 2023 12:00:12 +0000 https://www.bold.ne.jp/engineer-club/?p=4172 SQLでデータ件数を取得する場合は、「COUNT」を使用します。本記事では、COUNTを使って件数を取得する方法について解説します。

ここでは、以下のサンプルテーブル(sample01)を使用します。

会社 品名 値段
Company name Value
A社 マウス 1200
B社 マウス 1500
C社 マウス 2000
A社 キーボード 3500
A社 PCケース 4500
B社 モニター 18000
C社 モニター 25000
C社 USBケーブル 300
A社 USBケーブル 1400

1.COUNT関数について

1-1.COUNT関数とは

 COUNT関数は、指定した条件で見つかった件数を返します

1-2.COUNT関数の構文

COUNT(項目)

項目について

カッコ内の項目欄には、テーブルのカラム名や「*」を設定する場合が多いです。その場合、Where句で条件を追加します。

2.COUNT関数の使用例

2-1.基本的な使用例

ここでは、基本的な使用例を紹介していきます。

2-1-1.初期値設定

基本的な記述は、下記になります。

SELECT COUNT(*) FROM sample01;

2-2.特殊な書き方をする場合

2-2-1.カッコ内に条件文を設定する

カッコ内には、条件を設定することもできます。下記のSQLは、value(値段)4000以上の件数を出力しています。

SELECT COUNT(value > 4000 or null) FROM sample01;

結果:

COUNT(value > 4000 or null)
3

下記SQLでも同様の結果になります。

SELECT COUNT(*) FROM sample01 where value > 4000;

結果:

COUNT(*)
3

2-2-2.カッコ内に「ALL」「DISTINCT」を設定

すべてを対象にしたい場合には「ALL」、重複項目を削除したい場合は「DISINCT」を指定します。指定しない場合は、「ALL」が指定された状態になります。「ALL」を指定する時は、下記例のようにします。

例)会社がnull以外の件数を出力する場合

SELECT COUNT(ALL Company) FROM sample01;

結果:

COUNT(ALL Company)
9

DISTINCT」を指定する時は、下記例のようにします。

例)重複しない品名の件数を出力する場合

SELECT COUNT(DISTINCT name) FROM sample01;

結果:

COUNT(DISTINCT name)
5

3.最後に

COUNT関数は、機能確認や調査等の多くの場面で活躍します。他の関数や句と組み合わせて使用していってください。

]]>
https://www.bold.ne.jp/engineer-club/sql-count/feed 0