商売力開発ブログ

非エンジニアがWebサービスの開発、運営によって商売力をつける記録、その他の雑記

【提供サービス】プロジェクト管理、ガントチャートのProject-Alpha情報

ガントチャートを作成できるプロジェクト管理ツールProject-Alphaの情報になります。

プロジェクト管理ツールのProject-Alpha

サービス用のホームページは以下になります。こちらからアカウントを作成することができます。
home.prj-alpha.biz
新規にアカウントを作成した場合、以下を参考にして下さい。
www.prj-alpha.biz
ガントチャートの機能を中心にしたサービスの説明になります。
www.prj-alpha.biz

機能関連の情報

以下ではガントチャートに関連した機能説明の紹介をしております。
www.prj-alpha.biz
www.prj-alpha.biz

はてなブログの Search Console がエラーとなってたので対処する

今回ははてなブログの Google Search Console の状態がエラーとなっていたので、それの対処方法を説明します。

Google Search Console が突然エラーとなる

Google Search Console をホーム画面を確認すると、HTTPS化したはてなブログに「未確認」というマークが付いていて、Google Search Console が機能していない状態となっていました。

この一覧を見ると分かる通り、HTTPS化した方だけが「未確認」となっており、HTTPの方はエラーとはなっていません。はてなブログ側も Google Search Console も特に設定を変更していないのに、この状態になっていました。
とりあえずクリックして状態を確認してみると、内部エラーが発生しているとのことでした。ちなみに確認方法ははてなブログでは一般的なメタタグによるものです。

履歴を見ると、5日前から内部エラーが発生しています。ちなみにこの内部エラーが出ていた期間も Google Search Console は問題なく利用できていました。約5日間など一定期間で解決しないと、最終的に使用できない状態になるようです。
また Analytics の Search Console の部分を見ると、2日前からクリック数が取れなくなっていました。このあたりで関連付けの設定が切れたのかもしれません。

メタタグを使用しての確認を再度行ってみます。ちなみにこの確認に際して、はてなブログと Google Search Console については何の設定変更もしていません。

問題なく確認がされました。

一覧画面でも「未確認」が消えてます。

突然エラーとなった理由は不明

今回設定を何も変更してないのにエラーとなった理由はわかりませんでした。対処方法自体は簡単ですが、気がかりなのはエラーとなってもGoogleからは何の通知もなかったことです。 Google Search Console の画面を起動して、「未確認」となっている状態を見て、初めて気が付きました。そこまで頻繁に確認しないので、気付くのがかなり遅くなるかもしれません。

まとめ

今回は Google Search Console の状態がエラーとなっていたので、それの対処方法を説明しました。

以上

開始と終了日付から稼働日数(営業日数)を算出してみる

今回は、開始日付と終了日付から、その期間の稼働日数(営業日数)を算出してみます。ロジックを考えることがメインですが、コードはJavaScriptで記載します。

算出するための条件

稼働日数を算出するのに、土日など週の中での定休日と祝日について考慮する必要があります。今回は以下の条件で考えてみます。

  • 週の定休日となる曜日を自由に指定できる。
  • 祝日となる日付を自由に指定できる。

今回は開始日付が終了日付以下の関係が担保された状態のものとし、このチェックロジックは含めません。

ロジックの検討

開始日付と終了日付からの単純な期間を求める場合、JavaScriptではDateオブジェクトのタイムスタンプの差分で算出します。開始日付と終了日付が同じ場合、1日と考えると以下のようになります。

    var beginDate = new Date('2018/08/01');
    var endDate = new Date('2018/08/02');
    //開始と終了日付のタイムスタンプ
    var beginTime = beginDate.getTime();
    var endTime = endDate.getTime();
    //時間差を算出
    var diff = endTime - beginTime;
    //時間差をミリ秒単位を日単位に変換し(切り捨て)、1日分を加算
    var term = Math.floor(diff / (24 * 60 * 60 * 1000)) + 1;

開始日付から終了日付の間の各日付について、定休日となる曜日か、または祝日かを判定していくことで稼働日数を算出することも可能ですが、無駄な部分も多いので定休日の判定と祝日の判定を別けて対応します。これらを大きく別けると以下のようになります。

  1. 開始日付と終了日付の期間となる日数を算出する(上記で算出済み)。
  2. 対象期間の中で定休日となる日数を算出する。
  3. 対象期間の中で祝日となる日数を算出する。
  4. 対象期間から定休日となる日数と祝日となる日数を差し引いて、稼働日数を算出する。

定休日となる日数を算出する

ここでの定休日は曜日を指定してのものです。例えば土日などです。この指定した曜日の数が、一週間での定休日の日数となります。ある期間に含まれる週の数と一週間の定休日数を掛ければ簡単に求められことになります。ただし、割り切れない余りについては、個別に判定する必要があります。これらを順に行っていきます。

  1. 一週間の定休日の日数を算出する。
  2. 対象期間に含まれる週数を算出して、週数分の定休日の日数を算出する。
  3. 対象期間の中で上記の週数に含まれない余りを算出して、その余りの日数に含まれる定休日の日数を算出する。

JavaScriptではDateオブジェクトの曜日は、0が日曜日で順に連番され、6が土曜日という数値になります。定休日となる設定はこれらの数値を配列で保持しているものとします。

    //定休日となる曜日の設定
    var regularDayOff = [0,6];
    //一週間の定休日の数
    var lenDayOff = regularDayOff.length;

上で算出している開始日付から終了日付の対象期間を7で割った商がその期間に収まる週の数となります。そして余りの日数については、日毎に判定する必要があります。今回は余りが出た場合は開始日付から、その余りの日数分だけ曜日の判定を行うようにしてみます。(終了日付から、その余りの日数分だけ戻って判定しても良い)

    //期間に入る週の数、7で割って切り捨てて算出する
    var weeks = Math.floor(term / 7);
    //週の数から、その期間の定休日の休日数を算出する
    var dayOffs = weeks * lenDayOff;

後は余り日数の部分を開始日付から曜日の判定を行います。余りと曜日の判定は剰余演算子を使用します。JavaScriptでは「%」です。

    //週の数に入らない余りの日数
    var remainderDays = term % 7;
    //余りの日の処理
    if(remainderDays>0){
    	//余りの日がある場合、開始日付から余りの日数だけ曜日が定休日かの判定を行う
    	//開始日付の曜日数値の取得
    	var beginDay = beginDate.getDay();//0~6の曜日数値
    	for(var i = 0; i < remainderDays; i++){
    	    //曜日数値に余りの日数を加算していき、7で割った余りの曜日数値が定休日の配列に含まれるか
            if(regularDayOff.indexOf((beginDay + i) % 7) != -1){
                //定休日の配列に含まれる場合、休日数に加算する
                dayOffs++;
            }
    	}
    };

これで、対象期間に含まれる定休日の日数が算出できました。

祝日となる日数を算出する

続いて対象期間に含まれる祝日の日数を算出します。祝日は自由に指定できる想定ですが、それらを配列で設定したものとします。まず祝日の一覧と開始日付、終了日付を比較できるようにするためタイムスタンプに変換します。そのタイムスタンプと開始日付と終了日付を比較して日数を算出します。

  1. 祝日の一覧をタイムスタンプに変換する。
  2. 祝日の一覧から開始日付のタイムスタンプより大きく、終了日付のタイムスタンプより小さい祝日を探し、カウントする。

祝日は「YYYY/MM/DD」の形式で配列で保持しているものとします。

    //祝日の設定
    var holidayDates = ['2018/01/01','2018/01/02','2018/01/09'];

この祝日の一覧をタイムスタンプに変換するのですが、いくつか処理を検討します。まずこの祝日の一覧ですが、ソートされていない状態のもであればソートします。ソートしておくことで日付の比較を行う際に終了日付より大きくなったところで、それ以後は比較する必要がなくなります。
続いて祝日と定休日の問題です。祝日の中に定休日となる曜日の日付が含まれている場合、定休日の処理と合わせてカウントされてしまいます。よって定休日の曜日に含まれる日付について除いたものだけをタイムスタンプにした配列を作成して比較に使用します。

    //祝日をソートする
    holidayDates.sort();

    //祝日のタイムスタンプの配列
    var holidayTime=[];
    
    for(var i = 0; i < holidayDates.length; i++){
        //日付オブジェクトを設定する
        var dateObj = new Date(holidayDates[i]);
        if(regularDayOff.indexOf(dateObj.getDay())==-1){
            //定休日の曜日に存在しない場合、祝日のタイムスタンプの配列に追加する
            holidayTime.push(dateObj.getTime());
        }
    }

祝日のタイムスタンプ一覧ができたら、日付の比較を行いカウントします。祝日のタイムスタンプ一覧から、開始日付のタイムスタンプより大きい祝日があったら以後は終了日付のタイムスタンプより小さい祝日をカウントすることで祝日の日数を求めることができます。

    //祝日のカウント用
    var holidays=0;

    //開始日付より大きいかのフラグ
    var flgBegin=false;
    
    for(var i = 0; i < holidayTime.length; i++){
        //開始日付のフラグにより処理を変える
        if(flgBegin == false){
            //開始日付より大きくない状態
            if(beginTime <= holidayTime[i]){
                //祝日が開始日付より大きい場合、フラグを設定する
                flgBegin=true;
                if(holidayTime[i] <= endTime){
                    //終了日付より小さい場合、対象期間の範囲内なので加算する
                    holidays++;
                }else{
                    //終了日付より大きい場合、対象期間の範囲外なのでループを抜け出す
                    break;
                }
            }
        }else{
            //開始日付より大きい状態
            if(holidayTime[i] <= endTime){
                //終了日付より小さい場合、対象期間の範囲内なので加算する
                holidays++;
            }else{
                //終了日付より大きい場合、対象期間の範囲外なのでループを抜け出す
                break;
            }
        }
    }

以上で対象期間とその期間に含まれる定休日の日数と祝日の日数の算出ができました。後は差引した結果が稼働日数となります。

    //稼働日数の算出
    var workingDay = term - dayOffs - holidays;

稼働日数の算出ができたので利用しやすい形式に関数などを設定して下さい。

まとめ

今回は稼働日数(営業日数)の算出ロジックを考えてみました。

以上

【マニュアル】新規アカウントの作成について

今回は我々が開発しているプロジェクト管理ツールProject-Alpha(プロジェクトアルファ)の操作マニュアルとなります。

新規アカウントの作成について

新規のアカウント作成を行うと、設定用のメールが送信されます。

送信されたメールの手順に従って、アカウントの登録が完了すると、初期画面ではプロジェクトの作成画面に移動します。もちろんここで作成しないで後から作成することができます。

プロジェクトを作成すると、作成したプロジェクトの設定画面に移動します。

特に設定の変更が必要無い場合、プロジェクトホームのメニューを選択します。

ホーム画面からはいくつかのリンクからガントチャートに移動することができます。

利用プランの変更について

初期の状態ではプロジェクトは、上限により1つしか作成することができません。プロジェクトが完了するまで追加できませんが、利用プランを変更することで上限が変更され、プロジェクトを追加することができるようになります。これにより複数のプロジェクト管理とガントチャートに対応することができるようになります。また登録可能なメンバーの人数についても上限がありますが、同様に利用プランを変更することで上限が変更されます。
現在、利用プランの変更は無料で行うことができます。

登録可能状況の確認

メニューからそれぞれの状況の確認をすることができます。メンバーについては管理者メニューを選択するとメンバー管理が表示され、そこから上限や登録可能な人数を確認することができます。内部と外部で登録可能な上限が区分けされます。

プロジェクトについては、プロジェクト作成を選択すると追加画面が表示され、追加できない状態の場合、その旨を示すメッセージが表示されます。そこから利用状況を選択するとプロジェクトの利用状況が表示され上限や登録可能なプロジェクト数を確認することができます。

利用プランの変更

管理者メニューの中にある、利用プランを選択します。

利用プラン設定で現在のプランタイプが表示されます。初期はフリーのプランとなっていますので、こちらを変更して新しい利用プランに変更して下さい。メンバーやプロジェクトを追加することが可能となります。

以下はスタンダードに変更した場合です。スタンダードに限らずどのプランにも無料で変更できるようになっています。

以下は利用プランを変更後のメンバーの利用状況になります。上限が増加しているのがわかります。

利用プランを変更後のプロジェクト作成と利用状況の例です。上限が増加しているのがわかります。

まとめ

今回は新規アカウント登録時の操作マニュアルの説明でした。

以上

【関連するリンク】 

www.prj-alpha.biz

home.prj-alpha.biz

Google API を利用して、PHPで日本とアメリカの祝日を取得する

今回はGoogleのカレンダーAPIを利用して、PHPで日本とアメリカの祝日を取得する方法を紹介します。

GoogleAPIを利用する

GoogleのカレンダーAPIを利用するには、Googleのアカウントを作成して、Google Developers Console でAPIを利用できるように設定する必要があります。この辺りの手順は以下を参考にして下さい。

Google Calendar API を使って祝日を取る PHP編

ここにあるPHPのAPIのコードも参考にしましょう。

    $api_key = '取得したAPIキー';
    $holidays_id = 'japanese__ja@holiday.calendar.google.com';
    $holidays_url = sprintf(
        'https://www.googleapis.com/calendar/v3/calendars/%s/events?'.
        'key=%s&timeMin=%s&timeMax=%s&maxResults=%d&orderBy=startTime&singleEvents=true',
        $holidays_id,
        $api_key,
        $start_date,
        $end_date,
        30  
    );

    if( $results = file_get_contents($holidays_url, true))
    {
        $results = json_decode($results);
        $holidays = array();
        foreach($results->items as $item)
        {
            $date = strtotime((string) $item->start->date);
            $title = (string) $item->summary;
            $holidays[date('Y-m-d', $date)] = $title;   
        }
        ksort($holidays);   
    }

カレンダーを指定して日本とアメリカの祝日を取得する

「$holidays_url」となっている部分で取得対象を指定することになります。

    $holidays_url = sprintf(
        'https://www.googleapis.com/calendar/v3/calendars/%s/events?'.
        'key=%s&timeMin=%s&timeMax=%s&maxResults=%d&orderBy=startTime&singleEvents=true',
        $holidays_id, //取得元のカレンダーID
        $api_key, //取得したAPIキー
        $start_date, //取得開始日付
        $end_date, //取得終了日付
        30  //最大取得日数
    );

取得する開始日付と終了日付については、いったんは今年1年間となるように設定してみます。

    $year = date(Y);
    $start_date = date($year."-01-01\T00:00:00\Z"); //取得開始日付
    $end_date  = date($year."-12-31\T00:00:00\Z"); //取得終了日付

「$holidays_id」に設定するカレンダーによって取得される祝日が変わってきます。「japanese__ja@holiday.calendar.google.com」を指定すると以下のような日付データが取得できました。これは日本の祝日になっています。

No 日付 名称
1 2018/01/01 元日
2 2018/01/08 成人の日
3 2018/02/11 建国記念の日
4 2018/02/12 建国記念の日 振替休日
5 2018/03/21 春分の日
6 2018/04/29 昭和の日
7 2018/04/30 昭和の日 振替休日
8 2018/05/03 憲法記念日
9 2018/05/04 みどりの日
10 2018/05/05 こどもの日
11 2018/07/16 海の日
12 2018/08/11 山の日
13 2018/09/17 敬老の日
14 2018/09/23 秋分の日
15 2018/09/24 秋分の日 振替休日
16 2018/10/08 体育の日
17 2018/11/03 文化の日
18 2018/11/23 勤労感謝の日
19 2018/12/23 天皇誕生日
20 2018/12/24 天皇誕生日 振替休日

続いて「japanese__en@holiday.calendar.google.com」を指定すると以下のような日付データが取得できました。これは英語での日本の祝日になっています。

No 日付 名称
1 2018/01/01 New Year's Day
2 2018/01/08 Coming of Age Day
3 2018/02/11 National Foundation Day
4 2018/02/12 National Foundation Day observed
5 2018/03/21 Spring Equinox
6 2018/04/29 Shōwa Day
7 2018/04/30 Shōwa Day observed
8 2018/05/03 Constitution Memorial Day
9 2018/05/04 Greenery Day
10 2018/05/05 Children's Day
11 2018/07/16 Sea Day
12 2018/08/11 Mountain Day
13 2018/09/17 Respect for the Aged Day
14 2018/09/23 Autumn Equinox
15 2018/09/24 Autumn Equinox observed
16 2018/10/08 Sports Day
17 2018/11/03 Culture Day
18 2018/11/23 Labor Thanksgiving Day
19 2018/12/23 Emperor's Birthday
20 2018/12/24 Emperor's Birthday observed

「usa__ja@holiday.calendar.google.com」を指定すると以下のような日付データが取得できました。これはアメリカの祝日になっていますが、一部祝日でない日付も含まれています。また日本語ではなく英語でした。

No 日付 名称
1 2018/01/01 New Year's Day
2 2018/01/15 Martin Luther King Jr. Day
3 2018/02/14 Valentine's Day
4 2018/02/19 Presidents' Day (regional holiday)
5 2018/03/11 Daylight Saving Time starts
6 2018/03/17 St. Patrick's Day
7 2018/04/01 Easter Sunday
8 2018/04/17 Tax Day
9 2018/05/05 Cinco de Mayo
10 2018/05/13 Mother's Day
11 2018/05/28 Memorial Day
12 2018/06/17 Father's Day
13 2018/07/04 Independence Day
14 2018/09/03 Labor Day
15 2018/10/08 Columbus Day (regional holiday)
16 2018/10/31 Halloween
17 2018/11/04 Daylight Saving Time ends
18 2018/11/11 Veterans Day
19 2018/11/12 Veterans Day observed
20 2018/11/22 Thanksgiving Day
21 2018/11/23 Black Friday
22 2018/12/24 Christmas Eve
23 2018/12/25 Christmas Day

Googleカレンダーでアメリカの祝日を選択すると上記と同じものが取得されるので、APIでもこのような英語での日付データとなります。これは「usa__en@holiday.calendar.google.com」を指定した場合も同様のデータとなります。アメリカの祝日に関してはAPIで取得したままだと、余計な日付が含まれてしまうので少し工夫をする必要がありそうです。またアメリカ以外の外国を選択した場合も、同様の状態がありえそうです。

まとめ

今回はGoogleのカレンダーAPIを利用して、PHPで日本とアメリカの祝日を取得する方法を紹介します。

以上

メール検証でACMの証明書の更新を行う

「Action Required - Your certificate renewal」という件名のメールがAWSから来ていました。ここではACMのメール検証での証明書の更新方法を紹介します。

ACMの証明書の更新

AWSのACMで証明書を発行していたのですが、メール検証で確認を行っていた場合、期限が近付くと「Action Required - Your certificate renewal」というタイトルのメールが送付されてきました。
この本文では、以下のメールアドレス宛に証明書の更新用のメールを送付したとありました。
postmaster@"DomainName", webmaster@"DomainName", administrator@"DomainName", admin@"DomainName", hostmaster@"DomainName"
確認してみると「Certificate renewal for "Domain Name" requires approval」というメールが来ていましたので、対応して証明書の更新を行います。

ちなみにそれ以前に「Impact of Changes to WHOIS on AWS Certificate Manager (ACM) Email Validation 」というタイトルのメールが来ていて、メール検証ではなくドメイン検証にするように促されてましたが、特に対応していなかったのでメール検証での手順が自動で案内されたようです。

手順

まずはACMの画面で状態を確認します。詳細までみると検証状態が「検証保留中」となっていることが確認できます。メール検証を行い、こちらを更新していく作業を行っていきます。

「Certificate renewal for "Domain Name" requires approval」のタイトルのメールから、リンクをクリックします。

リンクから表示された画面の「I Approve」のボタンを押します。

「Success!」と表示される画面になれば成功です。

ACMの画面で状態を確認すると、検証状態が「成功」となっています。ただ詳細の部分は「検証保留中」のままになっています。

しばらくすると詳細の内容も更新されます。リクエスト日、発効日が更新されるとともに更新ステータスが「成功」となっているのを確認できます。

以上でACMのメール検証での証明書の更新作業は完了です。

まとめ

今回はメール検証でのACMの証明書の更新方法の紹介でした。

以上

【提供サービス】プロジェクト管理、ガントチャートのProject-Alpha情報

ガントチャートを作成できるプロジェクト管理ツールProject-Alphaの情報になります。

プロジェクト管理ツールのProject-Alpha

サービス用のホームページは以下になります。こちらからアカウントを作成することができます。
home.prj-alpha.biz
新規にアカウントを作成した場合、以下を参考にして下さい。
www.prj-alpha.biz
ガントチャートの機能を中心にしたサービスの説明になります。
www.prj-alpha.biz

機能関連の情報

以下ではガントチャートに関連した機能説明の紹介をしております。
www.prj-alpha.biz
www.prj-alpha.biz

「SHOE DOG」と「ナイキを育てた男たち」

今回はナイキの創業者フィル・ナイトが創業前から上場までを描いた自叙伝、SHOE DOGを紹介します。この本の発売後にBSで特集された番組「ナイキを育てた男たち~“SHOE DOG”とニッポン~」についても紹介します。

ナイキの創業の物語

大きめに本屋に行くと黒のカバーに金の文字でSHOE DOGと刻まれた本が並んでいるのを見た人も多いかもしれません。ナイキの創業者であるフィル・ナイトによる自叙伝で、500ページを超えるボリュームなのですが40万部を超えるヒットになっているそうです。

SHOE DOG(シュードッグ)

SHOE DOG(シュードッグ)

 

 出版元の東洋経済新報社では特集ページまで作る熱の入れようです。

store.toyokeizai.net

フィル・ナイトの曖昧な記憶を元にしていたり、誇張した部分も多々含まれると思いますが、創業前後から上場までの悪戦苦闘ぶりが赤裸々に語られていて、その語り口も相まって非常に面白い作品に仕上がっています。
オニツカの販売代理店として始まったという話は聞いたことがあったのですが、ナイキと日本の関わりが予想以上に深いことを知ることができます。この辺りはBSの特集番組がわかりやすくなっています。以下はその取材担当記者による紹介です。

www3.nhk.or.jp

www.msn.com

番組内では、当時のオニツカの開発担当がナイキ(当時はブルーリボンという社名)側からの提案を受けて開発したコルテッツの話をしたり、本書の中では日商岩井のスメラギ、イトーとして登場しているお二人が取材に応じています。
ナイキ側ではナイトだけでなく、あの「手紙魔」ジョンソンや車いすのウッデルも取材に応じてくれています。

この取材の中で特に印象深いのはアイスマン・イトーとフィルナイトが呼んでいた伊藤忠幸氏のエピソードです。本書の中の一つのクライマックスは口座を凍結されピンチに陥ったところを「日商が返済します」といってイトーがフィル・ナイトを、いやナイキを救ったところでしょう。この中ではスメラギが独断で社内規定を破ってインボイスの発行を遅らせていたことが書かれていますが、イトーこと伊藤忠幸氏も同様に社内規定を破っていたことが番組内で語られます。
「日商が返済します」といった金額は約1億9千万円でした。これは日商岩井の中では社長決裁が必要な金額なのですが、伊藤忠幸氏は独断で決済したために、これが問題となりました。。結果、伊藤忠幸氏はクビを通告されます。「権限規定なんか、無視してやっちゃたんですけども」とたんたんとした口調で語る伊藤忠幸氏、当時30代前半の年齢にして彼も人生をかけていたのです。その後、彼に気をかけた取締役の尽力でクビは撤回され日商岩井に残ることができたとのことです。

シュードッグな人々

フィル・ナイトは地元のオレゴン大学で陸上チームに所属、卒業後に陸軍での1年間の勤務を経て、スタンフォード大学大学院にでMBA取得しています。その後助言を受けて公認会計士の資格を取得し、会社を立ち上げながら、プライスウォーターハウスで働いたり、大学で会計学を教えることもありました。
本書を読んでいてわかるのは相当な読書家であること。特に各国の歴史・宗教・文化について詳しい上に、実際に世界中を見て回っているのも知識の深さを感じさせます。交渉する相手の国や文化を勉強する描写も良く出てきます。読書に関しては以下のようにあり、極限でのリーダーシップで自身がどうするべきかをよく考えてたことが伺えます。

私は大将、侍、将軍などについてできる限りの本を読んだが、中でも夢中だったのは私にとっての英雄3人、チャーチル、ケネディ、トルストイの伝記だった。暴力はまったく好まないが、極限状況でのリーダーシップについては興味があった。戦争は究極の極限状況だが、ビジネスもある意味戦争だ。ビジネスは銃弾のない戦争だと誰かが言っていたが、私も同感だ。
(1966: P128)

このように基礎的な学力、経営学・会計学や歴史などの知識、実行に移す行動力、自分たちを負け犬だという謙虚さ、これらだけでも並々ならぬモノがありますが、これに加え靴に対して強烈な情熱を持っています。タイトルでもあるシュードッグとは本書の中で以下のように言っています。

シュードッグとは靴の製造、販売、購入、デザインなどすべてに身を捧げる人間のことだ。靴の商売に長く関わり懸命に身を捧げ、靴以外のことは何も考えず何も話さない。そんな人間同士が、互いにそう呼び合っている。
(1971: P265)

熱中の領域を超え、病的とも言えるほど靴のことばかり考えてる人たちです。
フィル・ナイトはもちろんですが、このような人たちが多く登場します。中でも共同経営者となるバウワーマンと従業員第1号となるジョンソンは印象的です。

バウワーマンはオレゴン大学の陸上部の伝説的コーチで、フィル・ナイトも指導を受けた人物です。ナイキの創業前から独自にシューズの改良などを行うほど靴に情熱を注ぐ人物で、ナイキでもいくつかの靴ブランドの発明を行っている。初期にはオニツカの靴を分解し、アメリカ人に合うためにはどうすれば良いか徹底的に研究しオニツカに提案してコルテッツが誕生しています。
バウワーマンがエアソールの開発を聞いて駄目だねと言ってたことに対するフィル・ナイトの感想がシュードッグならではです。

私がエアソールを開発中だとうっかり漏らすと彼の様子が変わった。空気を注入したルディの発明のことをバウワーマンに話すと、彼はあざ笑ったのだ。「ぷっ。エアシューズだって。そんなものうまくいくわけがないだろ、バック」
彼の言葉から少し感じ取れたのは、嫉妬だろうか?
私はいい兆候だと思った。彼の中で競争心が再び芽生えてきたのだから。
(1977: P440)

バウワーマンに靴に対する情熱が戻ってきた様子を喜んでいます。1977年はバウワーマンは60代の後半に差し掛かってます。その少し前には衰えた描写もあります。しかし引退するよりも、靴に関わり続ける方がシュードッグな人々にとっては重要なのです。

そしてもう一人のジョンソンに関してはエピソードが事欠きません。ジョンソンも大学時代は陸上の中距離走者で、フィル・ナイトの誘いに乗り販売員となり、その後フルタイムの従業員第1号となります。自身でも靴を改良したり、販売店を任されますが、突然東海岸への理不尽な異動にあったりしますがめげません。面白いのは手紙に関するエピソードです。手紙魔とまで言われるほど手紙を出しまくっていたようで、最後に必ず励ましに言葉を求めるのですが、それをフィル・ナイトは無視し続けたそうです。更にはこんな記述があります。

いっそアパートを完全に引き払って、オフィスに移った方がいいのではという案が頭をよぎった。何せ基本的にそこで寝泊まりしているも同然で、プライス・ウォーターハウスとブルーリボンを交互に行き来する毎日だ。シャワーはジムで浴びればいい。
だがオフィスで暮らすなど、まともな人間のすることではないと自分に言い聞かせた。
そしてジョンソンから、オフィスで寝泊まりしているという手紙を受け取った。
(1967: P166)

経営層に励ましを求めても無視され続けるも、自分の仕事を今まで以上に邁進し続ける従業員、仕舞いにはオフィスに泊まり込む生活を送ってしまう。こんな人に出会ったことはありません。ジョンソンも靴に関わる仕事ができることが幸せだと考えていたのでしょう。

採用について

ジョンソンの後に続く2人目の従業員を探すところに以下のような記述があります。

私は、東海岸を任せられる人を雇うことにした。もちろん元長距離ランナーだ。
(1967: P148)

 「もちろん」というほど、ランナーであることが重要な要素であると考えていたようです(他の伝手がなかっただけかもしれませんが)。この初期の段階では、優秀な営業マンよりも靴(=自分たちの扱う製品・サービス)に対する情熱を持っている人が適任だし必要だと考えてたのでしょう。

それが10年経過して、色々な人を採用していく中で以下のような記述があります。

別に私が会計士や弁護士を偏愛しているわけではない。才能のある人間をどこで発掘すればいいのかわからないだけだ。
(中略)
頭の切れる人間を雇うことが先決であり、少なくとも会計士や弁護士なら難しい課題に対処できるだろうし、ここぞという試験にも受かるだろう。
これまで雇ったほとんどの者が基本的な能力を示してくれた。
会計士を雇うのは、計算ができるからだ。弁護士を雇うのは話が達者だからだ。だが、マーケティングの専門家や製品の開発者を雇ったところで、何が期待できるだろう。何もない。彼らに何ができるのか、できることがあるのかすら予想できない。ではそこらのビジネススクールの卒業生はどうか。誰も好き好んで靴を売ろうとは思わないだろう。しかもみんな経験はゼロだから、雇う側は面接での感触に賭けてサイコロを振るしかない。一か八かでサイコロを振っていられる余裕など、こっちにはないのだ。
(1978: P463~464)

靴に対して情熱があるかわからない人を雇ってきた中で、フィル・ナイトが到達した考えが会計士や弁護士なら戦力としてまだ計算しやすいということでしょう。マーケティングの専門家なども靴に対して情熱があるかわからない人の場合は、一か八かの賭けとなるというのが、シュードッグな人々の判断なのでしょう。

その他

 人が1日に歩く歩数は平均7500歩で、一生のうちでは2億7400万歩となり、これは世界一周の距離に相当する。シュードッグはそうした世界一周の旅に関わりたいのだろう。
 (1971: P266)

会計士でもあったフィル・ナイトはこうした数字で考えることも意識していたのではないかと思われます。例えば平均より多く歩く人たちはどんな人たちか、それはどんな理由で多くなっていて何歩くらい多いのかとか、2億7400万歩のうちどれだけナイキは貢献できるか、履いてもらう歩数を増やすにはどうしたら良いかといったものです。
これは現在でも同じで単純に靴の売上高だけを考えている人には出てこない発想でしょう。

貴重な教訓を得た。1足のシューズに12もの新機軸を取り込んではいけない。デザインチームに対してはもちろん、シューズにも多くを求め過ぎたらしい。私たちは「製図版に立ち返ろう」を合言葉に、ワッフルメーカーを何個もダメにしたバウワーマンのことを振り返った。
(1978: P470

靴というある程度の型が決まっている製品に関して、新たな機能を多く入れ過ぎたことを失敗だったと振り返っています。多くの新機能を取り込むことに注力し過ぎることで、どこかに無理や見落としが発生したのかもしれません。これは靴以外の製品やサービスならどうでしょうか。自分たちの行う事業で当てはめて考察してみるのも良いかもしれません。

問題はどうやって中国に進出するかではない。すでに一部の会社が進出を予定しており、そうなれば他社も続くだろう。問題はどうやって最初に乗り込むかだ。最初に進出すれば数十年は有利に立てる。そうすれば中国の製造部門だけでなく、中国市場や中国の政治指導者との関係も有利に運ぶことができ、大きな成功を見込める。中国についてミーティングを重ねた最初の頃、私たちは常にこう言っていた。あの国には10億人の足があると。
(1979: P484

これはこちらで紹介したようなマーケティング22の法則の一番手の法則に近い考え方です。中国という10億人の足がある巨大市場で、一番に進出することがどれだけ有利になるか、重要であるかを意識していたことが伺えます。

ジョンソンは言う。「つまり、この新製品のナイキはまったく未完成で、はっきり言えば、そこまで良い代物じゃないのに、君たちは買おうとしている。何がそんにいいんだ?」
相手は笑った。「君たちブルーリボンとは何年ものつきあいだから、君たちが正直なのはわかってる。他の連中はデタラメだけど、君たちはいつもズバリ本当のことを言ってくれるから、この新製品、ナイキっていうんだっけ、これが当たると言えば信じるさ」
ジョンソンはブースに戻って頭をかいた。「本当のことを言うべきなんだな」
(1972: P288

これはこちらで紹介したようなマーケティング22の法則の正直の法則に近い考え方です。この当時のナイキにはお客にとってポジティブな要素はあまりないのかもしれませんが、正直なことが評価されています。このあたりは靴に対して嘘をつけないそれまでのシュードッグな人々の姿勢が大きな信頼を得ることになったのでしょう。

まとめ

今回は「SHOE DOG」と「ナイキを育てた男たち」の紹介でした。

以上

【スポンサーリンク】