技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

情報処理技術者試験対策「ファイブフォース分析」

目次

https://1drv.ms/b/s!AivF3bzWXOzuhG1Xk5hscKYqkLkM

-------------------------------
経営戦略シリーズということで、今回はファイブフォース分析について書きます。
これも試験に出ることがあります。
実務上は意識したことがありませんが、市場分析する上では考えなければならないことなので、おそらく無意識的に意識していたと思います。
 
ファイブフォース分析とは、自社の周辺に取り巻く「売り手の交渉力」「買い手の交渉力」「競争企業間の敵対関係」「新規参入業者の脅威」「代替品の脅威」の5つの力に着目した市場分析手法です。
これらの力が強ければ強いほど、厳しい経営環境であるということが言えます。
この5つの力について、例も交えて以下で説明します。

  • 売り手の交渉力
    部品や原材料など、自社の経営に必要なリソースの売り手が強い交渉力を持っている場合、不利な条件でリソースを購入せざるを得なくなり、収益性が悪くなる。例えば電気自動車の分野で、実用に耐え得るバッテリーを作れる会社が限られる場合、その会社の言い値でバッテリーを購入せざるを得なくなる。
  • 書い手の交渉力
    書い手の交渉力が強い場合、不利な条件で製品やサービスを提供せざるを得なくなり、収益性が悪くなる。例えば、大規模小売業者からの大量発注がないと経営が成り立たない食品メーカーの場合、PBや目玉商品向けに採算ギリギリの価格で大規模小売業者へ納品せざるを得なくなる。
  • 競争企業間の敵対関係
    業界内での競争が激しい場合は、競争で勝つために高品質・低価格を強いられるため、収益性が悪くなる。例えば理髪等を行う美容業界は需要に比べて供給の方が多い(美容院はコンビニの4倍の店舗数)ため、1000円カット等の低価格でのサービス提供や、カリスマ美容師による質の確保を行わないと、利益を出すことができない。
  • 新規参入業者の脅威
    参入障壁が低く新規参入が容易な業界では、他社の新規参入が増えることで競争が増え、収益性が悪化する可能性がある。例えば、80~90年代のテレビゲーム業界は国家規制による参入障壁がなく市場自体も伸び盛りであったため、様々なメーカーが参入し新ハードを開発しては消えていく厳しい業界であった。
  • 代替品の脅威
    顧客の要望が代替品により満たされることで、自社の製品の競争力が落ち、収益性が悪化する可能性がある。例えば、デジタルカメラの市場規模は10年代に入って急速に悪化しているが、この背景にはスマートフォンという代替品の存在がある。

なお、これは私見ですが、「売り手の交渉力」は自社(のパートナー)、「買い手の交渉力」は顧客、「競争企業間の敵対関係」「新規参入業者の脅威」「代替品の脅威」は競合を詳細化したもの、つまりファイブフォース分析は3C分析を詳細化したものであると捉えることができると思っています。
また、他社からの圧力について詳細に語られたフレームワークであるため、そもそもの市場規模(顧客の要望がどれだけ存在するか)をフレームワーク中で考慮できない欠点があります。これについては別のフレームワークを併用して分析する必要があります。

情報処理技術者試験対策「3C分析」

目次

https://1drv.ms/b/s!AivF3bzWXOzuhG1Xk5hscKYqkLkM

-------------------------------
経営戦略シリーズということで、今回は3C分析について書きます。
これも試験に出ることがあります。
また、私の実務上も、新規事業を提案する時に3C分析の内容を考慮していました。
SWOT分析の前提として3C分析を行うというイメージです。
 
3C分析の「3C」とは、「Company(自社)」「Competitor(競合)」「Costomer(顧客(市場))」の頭文字を取ったもので、この3者について分析することで抜けもれなく経営環境を分析できる、というものです。
 
SWOT分析で出した恋愛戦略の例で言うと、以下のようになります。

  • 自社
    優しくすることができる(癒すことができる)
    ホストほどかっこよくない
    …等
  • 競合
    ホスト(普通の人よりかっこよい)
    ペット(癒しになる。人と違ってモノを言わない。)
    カウンセラー(癒しになる。医療行為なので技術力が高い。)
    …等
  • 顧客(市場)
    身体的魅力に惹かれる人がいる
    癒しを求める人がいる
    …等

情報処理技術者試験対策「SWOT分析」

目次

https://1drv.ms/b/s!AivF3bzWXOzuhG1Xk5hscKYqkLkM

-------------------------------
今回は、経営戦略手法のSWOT分析について書きます。
実務では新規事業の提案で使ったことがあります。
情報処理技術者でも時々出題されることがあります。
経営戦略は趣味なのでしばらくこの手の記事が続くかもしれません。すみません。
 
SWOT分析とは、企業戦略を定めるために、内部要因(自社)の強み(Strength)・弱み(Weakness)と外部要因(市場)の機会(Opportunity)・脅威(Threaten)を表に書き出す手法です。
例えば、以下のような形で書き出します。

f:id:akira2kun:20180714193732j:plain

この例を用いて戦略を考えると、「癒しを求める人に対して優しく接する。ただしペットやカウンセラーとは差別化する。」といった戦略が有効になると思われます。
 
しかし、実務では、SWOT分析を用いさえすれば有効な戦略を導き出せるという単純なものでは決してありません。
ここからは私見ですが、SWOT分析を用いるにあたっては、下記の2点の問題をクリアする必要があると思っています。

  • SWOTを正しく列挙する
    そもそもSWOTを正しく把握できなければ、そこから導き出される戦略も正しいものではなくなる。
  • 表中に書かれたSWOTから最適な戦略を組み立てる
    SWOTから最適な戦略を導き出すまでのプロセスが明示されていないため、SWOTを正しく列挙できていたとしても正しい戦略を導き出せるかはわからない。

以上の問題点をクリアするために他の思考フレームワークを組み合わせる必要があると思っていますし、それでも足りない所はKKD(勘と経験と度胸)に頼らざるを得ないと思っています。
個人的には、自社が置かれている状況をわかりやすく整理し他者と共有しやすくするために使っているという感覚です。

情報処理技術者試験対策「SQL(外部キー)」

目次

https://1drv.ms/b/s!AivF3bzWXOzuhG1Xk5hscKYqkLkM

-------------------------------
今回は、SQLの外部キー(参照制約)について書きます。
外部キーはPG・SEなら知っておくべき基礎的な文法だと思うのですが、実務だと使わない現場ではとことん使わない文法で、そのような現場で働いていると忘れがちになるので。
 
【外部キーを定義した時の挙動】
テーブルAのある列が、テーブルBのある列を参照している場合、テーブルAの当該の列を外部キーに指定することができます。
オプションを指定しない場合は下記の挙動になります。

  • テーブルAにレコードを追加(INSERT文を発行)する場合、外部キーを指定した列の値が、テーブルBに登録されている値かNULLでなければ、レコード追加に失敗する。
  • テーブルBのレコードを更新(UPDATE文を発行)・削除(DELETE文を発行)する場合、テーブルAにその値を持っているレコードが存在するなら、レコード更新・削除に失敗する。

オプションとしては以下のものがあります。
テーブルBのレコードを更新または削除する場合の挙動を指定できます。

  • NO ACTION
    オプション未指定時と同じ挙動になる。
  • CASCADE
    テーブルAにその値を持っているレコードが存在する場合においても更新・削除が可能。
    テーブルBの値更新に連動してテーブルAの同じ値を持つ列の値が更新されたり、テーブルBのレコード削除に連動してテーブルAの同じ値を持つレコードが削除されたりする。
  • SET NULL
    テーブルAにその値を持っているレコードが存在する場合においても更新・削除が可能。
    テーブルAの同じ値を持つ列の値はNULLに更新される。


【外部キー定義の構文】
FOREIGN KEY (テーブルAの列名)
REFERENCES テーブルB名(列名)
[ON UPDATE {NO ACTION|CASCADE|SET NULL}]
[ON DELETE {NO ACTION|CASCADE|SET NULL}]
 
【テーブル定義の例】

  • 参照元テーブル(テーブルB)の定義
    create table 商品(
    商品ID INT PRIMARY KEY,
    商品名 CHAR(50)
    );
  • 参照先テーブル(テーブルA)の定義
    (列制約、オプション無しの場合)
    create table 予約(
    予約ID INT PRIMARY KEY,
    商品ID INT REFERENCES 商品(商品ID)
    );
    (テーブル制約、DELETE時にSET NULLオプションをつける場合)
    create table 予約(
    予約ID INT PRIMARY KEY,
    商品ID INT,
    FOREIGN KEY(商品ID)
    REFERENCES 商品(商品ID)
    ON DELETE SET NULL;

【テーブル操作の例】

  • 商品
    +--------+--------+
    | 商品ID | 商品名 |
    +--------+--------+
    | 1      | 商品A |
    | 2      | 商品B |
    | 3      | 商品C |
    +--------+--------+
  • 予約
    +--------+--------+
    | 予約ID | 商品ID |
    +--------+--------+
    | 1      | 1      |
    | 2      | 2      |
    | 3      | 1      |
    +--------+--------+
     ※商品IDに外部キー定義を行う。
  • 予約テーブルに商品Aの注文を追加
    これは成功する。
  • 予約テーブルに商品未定(商品ID=NULL)の注文を追加
    これは成功する。
  • 予約テーブルに商品D(商品ID=4)の注文を追加
    これは失敗する。
  • オプション無しで商品テーブルの商品Aの商品IDを3に変更
    これは失敗する。
  • オプション無しで商品テーブルの商品Aのレコードを削除
    これは失敗する。
  • オプション無しで商品テーブルの商品Cのレコードを削除
    これは成功する。
    (予約テーブルで参照されていないレコードのため)
  • CASCADEオプションで商品テーブルの商品Aの商品IDを3に変更
    これは成功する。予約テーブルは下記のように更新される。
    +--------+--------+
    | 予約ID | 商品ID |
    +--------+--------+
    | 1      | 3      |
    | 2      | 2      |
    | 3      | 3      |
    +--------+--------+
  • CASCADEオプションで商品テーブルの商品Aのレコードを削除
    これは成功する。予約テーブルは下記のように更新される。
    +--------+--------+
    | 予約ID | 商品ID |
    +--------+--------+
    | 2      | 2      |
    +--------+--------+
  • SET NULLオプションで商品テーブルの商品Aの商品IDを3に変更
    これは成功する。予約テーブルは下記のように更新される。
    +--------+--------+
    | 予約ID | 商品ID |
    +--------+--------+
    | 1      | NULL   |
    | 2      | 2      |
    | 3      | NULL   |
    +--------+--------+
  • SET NULLオプションで商品テーブルの商品Aのレコードを削除
    これは成功する。予約テーブルは下記のように更新される。
    +--------+--------+
    | 予約ID | 商品ID |
    +--------+--------+
    | 1      | NULL   |
    | 2      | 2      |
    | 3      | NULL   |
    +--------+--------+

情報処理技術者試験対策「オーダ(O)」

目次

https://1drv.ms/b/s!AivF3bzWXOzuhG1Xk5hscKYqkLkM

-------------------------------
今回は、検索アルゴリズムやソートアルゴリズムの性能を評価する際に用いられるオーダ(O)について書きます。
 
実務で検索アルゴリズムやソートアルゴリズムを自力で実装することはOSやフレームワークを開発する職種でない限りまずないと思いますが、オーダは処理時間の見積もりの際に使用することがあります。
情報処理技術者試験でもオーダに関する問題は出題されることがあります。
 
下記に、代表的なアルゴリズムとそのオーダを記載します。

ここで、Nはデータ量のことを指し、オーダは処理時間のことを指します。
例えば、「O(N^3)」なら、処理時間はデータ量の増加の割合の3乗となります。
データ量が2倍になれば、処理時間は8倍(2^3)となります。
 
また、情報処理の分野では、logの底は2とされています。
そのため、「logN」とは、「2を何乗したらNになるのか」を指す値となります。
log2は1(2^1=2)、log4なら2(2^2=4)、log1024なら10(2^10=1024)となります。
例えば、2分検索の場合、階層が1深くなれば(処理回数が1回増えれば)2倍のデータを検索できるようになるので、「2^処理回数=データ量」の関係が成り立ち、O(logN)と表記できます。
 
例として、データ量が4倍になった時の処理時間の増加量を以下に示します。

なお、実務で処理時間を見積もる際、OSや製品で用意されている検索・ソートアルゴリズムは原則として高速なものが用意されているので、2分検索やクイックソートマージソートヒープソートと同じオーダで計算して良いでしょう。

情報処理技術者試験対策「アセンブリ言語(CASLⅡ)」

目次

https://1drv.ms/b/s!AivF3bzWXOzuhG1Xk5hscKYqkLkM

-------------------------------
今回は、基本情報処理技術者試験の午後選択問題で出題されるアセンブリ言語CASLⅡ」について書きます。
と言っても、文法的な話は書籍や他サイトで勉強した方が良いので、実務での活用場面やサイトの紹介がメインになります。
 
「今時アセンブリ言語を使う現場なんてないのでは」と思われるかもしれませんが、レガシー資産を活用する現場では必要になることがあります。
 
私も少しだけ携わったことがあります。
遥か昔に社内で作成されたロードモジュールがあり、そのロードモジュールを新システムへ移行する要件がありました。
しかし、現システムと新システムではハードウェアの仕様が異なりそのまま移行できなかったため、ロードモジュールをアセンブリ言語により解析し、新システムでコンパイル可能なソースコードの形に変換し対応したことがあります。
(社内に詳しい人がいて助かりました。なお、そのプログラムは現在も無事に稼働しています。)
 
また、他の方から聞いた話だと、ホストコンピュータで高性能を求められる場合は、機械語に近いアセンブリ言語で実装する必要があるという話を聞きました。COBOLのような高級言語だと遅くなるそうです。
 
なお、アセンブリ言語には不正なコーディングからコンピュータを守る仕組みがないため、コンピュータウイルス作成やハッキングの世界でもアセンブリ言語は使われたりするそうです。
 
基本情報の試験対策の面から見ても、未経験の段階でCやCOBOLjavaの言語仕様を把握するのはかなりハードルが高いので、言語仕様が問題中に明記され高度な処理も行わないCASLⅡでの受験は有効になります。
(私も基本情報に合格した際はCASLⅡで受験しました。なお、表計算は出題されない時代でした。今なら表計算の方が楽と言えば楽かもしれません。)
初学者の学習の面からも、機械語と命令が1対1対応しているアセンブリ言語を学ぶことでコンピュータの動きを理解できるため、C言語java等の高級言語を学ぶ足がかりになるのでお勧めです。
 
CASLⅡは色々なサイトでシミュレータが公開されていたり、文法的な解説がされていたりします。
今回は、その中でお勧めのサイトを2つ紹介します。
 

----------------------
2018/11/28
偶然同じ会社にアセンブリ経験者がいたので、その方から聞いた話を元に内容を一部見直しました。

情報処理技術者試験対策「損益分岐点」

目次

https://1drv.ms/b/s!AivF3bzWXOzuhG1Xk5hscKYqkLkM

-------------------------------
今回は、会計・財務分野の損益分岐点について説明します。
会計・財務分野は基本的に頑張って暗記するしかないのですが、損益分岐点は概念を理解するのが少し難しいので、当記事で扱うこととしました。
なお、会計・財務の知識は、偉い人になった時に実務でも使うようになるはずです。
 
損益分岐点の前に、以下の用語について説明します。

  • 売上
    製品・サービスを売ることで得られた金額
  • 固定費
    売上に関わらず常に発生する費用
    (例:テナントの使用料)
  • 変動費
    売上に比例して発生する費用
    (例:製品の原価)
  • 費用
    固定費と変動費を合わせた金額
  • 変動費
    売上の内、変動費が占める割合。
    変動費/売上」で算出できる。
  • 損益分岐点
    売上と費用が一致する場合の売上。損失も利益も出ていない状態。
    損益分岐点よりも売上が少なければ損失、多ければ利益が発生する。

売上をx、費用・売上をy、変動費率をa、固定費をbとして表すと、下記図のような関係性になります。
売上は「y=x」、費用は「y=ax+b」という式で表すことができます。

f:id:akira2kun:20180712000143j:plain

損益分岐点の場合は売上と費用が一致するので、以下の式が成り立ちます。
       x = ax + b
  x - ax = b
x(1 - a) = b
 
例えば、売上が700万円の時の変動費が140万円、固定費が500万円の場合、変動費率は以下のようになります。
a = 140 / 700
  = 0.2
損益分岐点の時の売上は以下のように求めることができ、625万円となります。。
x(1 - 0.2) = 500
      0.8x = 500
         x = 625
 
なお、「1 - a」とは、「売上が1単位増えると利益はいくら増えるか」というのを表します。
「1 - a」を式で言い換えると、以下のようになります。
1 - a = 1 - 変動費 / 売上
      = (売上 / 売上) - (変動費 / 売上)
      = (売上 - 変動費) / 売上
売上から変動費を引き、売上で割ったものが、売上が1単位増えた場合の利益の増分になります。
(上記の例では0.8となります。売上が1増えると利益が0.8増加します。)
というわけで、損失分岐点では以下が成り立っているということになります。
売上 * 売上が1単位増えた場合の利益の増分 = 固定費
要は、固定費を回収するためにいくら売り上げれば良いのかを考えれば、損益分岐点を求めることができます。
細かい数式を忘れてしまったとしても、「固定費と変動費の概念」「固定費を回収するのにいくら売り上げれば良いのかという視点」の2点さえ忘れなければ、情報処理技術者の問題はなんとか解くことができます。