today::エンジニアに憧れる非エンジニア

今のところは、エンジニアとは言えないところの職種です。しかしエンジニア的なものの考え方に興味津津。

NTT通信建設業界に関する団体等

概要

NTT通信建設業界の業務遂行には、「業界内部の人でなければ何のことやらさっぱりわからない」という団体が少なからず関係してきます。

  • 3JV
  • 情報通信エンジニアリング協会(ITEA)
  • 通信電線線材協会
  • 全国通信用機器材工業協同組合(全通協)
  • 電気通信協会(TTA)

この記事では、上記団体等について解説していきます。

3JV

NTT通信建設業界の内部において、「通信建設全国大手3グループの総称」を指して使われる語句です。通信建設全国大手3グループは、以下3つの企業系列を指します。

  • コムシスグループ
  • エクシオグループ1
  • ミライトグループ

私個人としては、「3JV」という語句は、「サービス総合工事の受注単位」に由来する語句と考えています。2021年時点において、NTT東西発注のサービス総合工事は、通信建設会社が資本系列ごとに組成された共同企業体(JV)が受注単位となっています。NTT通信建設業界各社において、サービス総合工事が売上・利益に占める比率は非常に大きいので、通信建設会社全体を資本系列で区分する表現が必要となった事情もあり、自然発生的に3JVという表現が生まれた…そのような見立てです。

rapidliner0.hatenablog.com

3JVに関する真実

NTT通信東西発注の電気通信設備工事は、3JVに属する企業以外元請受注できない仕組みとなっています。その仕組みは以下です。

  • NTT東西発注の電気通信設備工事は、各社の「電気通信設備請負工事競争参加資格」を有する事業者以外元請受注できない
  • 同資格を有する事業者が、3JVに属する事業者以外に存在しない

また、NTT通信建設業界内部においては、「NTT東西発注の電気通信設備工事を元請受注可能な事業者の総称、特に資本系列に着目した場合の総称」として「3JV」という語句が実際に使われています。

情報通信エンジニアリング協会

www.itea.or.jp

法人格としては「一般社団法人 情報通信エンジニアリング協会」 です。旧称は「電信電話工事協会」でした。略称は「ITEA」です。

同協会はNTT通信建設業界の業界団体です。内実としては、「NTTグループ工事施工協力会2」に近いのではないかと思います。

ITEA会員に含まれない事業者

「通信建設業界の業界団体」と言いつつ、以下に挙げる事業者はITEA会員に含まれていません。

このような中間組織が存在する理由と思われるもの

ITEAは、企業組織論における中間組織に分類される組織です。

kotobank.jp

間組織の存在・存続は、相応の理由があって初めて許されるものです。私個人としては、NTT通信建設業界において中間組織の存在・存続が許される理由として、以下のような事柄があるのではないかと考えています。

  • NTT東西から通信建設業界に対し、大量の工事が常日頃発注される
    • NTT東西の通信設備は、ユニバーサルサービスを担う設備である
    • 事業規模が大きいため、複数のプレイヤーが通信建設業界内部で存続しうる
  • NTT東西の通信設備の工事は、特殊な技能・技術を必要とする
    • 通信事業以外で使われないような設備・機工具等が多い

通信電線線材協会

www.senzai-kyokai.jp

NTTグループ発注の電気通信設備工事に材料・機工具を供給するサプライヤーにより構成される業界団体です。以下のような材料・機工具を供給するサプライヤーを会員としています。

  • コンクリート構造物
  • 通信ケーブル類
  • コネクタ類
  • 端子函類
  • 配線工事に用いるモール類
  • 土木設備に付帯する各種構造物
  • ケーブル接続用工具類
  • 高所作業車、梯子

全国通信用機器材工業協同組合

www.zentsukyo.or.jp

NTTグループ発注の電気通信設備工事に材料・機工具を供給する中小サプライヤーにより構成される中小企業等協同組合です。略称は「全通協」です。全通協自身も、上記通信電線線材協会の会員団体となっています。

電気通信協会

www.tta.or.jp

以下のような事業を行う一般社団法人です。略称は「TTA」です。

  • 機関誌「電気通信」の発行
  • 「NTT技術ジャーナル」の発行
  • 電気通信に関する各種講演会・セミナー等の開催
  • NTT各社の工事従事技術者資格認定試験の実施

以下のような理由から、同法人はNTTの外郭団体の一つと考えていいのではないかと思います。

  • 2021年4時点の同協会会長は、2012年~2018年にNTT東日本の社長であった人物である
  • 他の常勤役員2名も、NTTグループの主要事業会社で代表取締役を務めた人物である

  1. エクシオグループは企業系列の名称であると同時に、企業系列の頂点に位置する統括事業会社(旧名:協和エクシオ)の名称でもあります。本記事では、企業系列の名称として「エクシオグループ」の名称を用いています。

  2. 施工協力会そのものについての総論は、岩松準氏によるPDF文書「施工協力会」に詳しく記述がなされています。

NTT東西における、線路設備工事規格管理の体系

概要

NTT東西が構築・運用する通信設備は、ユニバーサルサービスの一翼を担う設備も含まれるだけあり、その規模は巨大です。年間の設備投資総額は、NTT東西それぞれで数千億円規模に上ります。それだけに、当該設備に関する工事規格の管理についても、精緻な管理体系が構築・運用されています。

当エントリでは、そんな「NTT東西における、線路設備工事規格管理の体系」について記述していきます。

総論

NTT東西発注工事の工法・工事規格に関する各種ドキュメントは、発注者たるNTT各社から発信され、ITEA1を通じて元請各社に共有されます。当該ドキュメント類は、インターネットと直接接続されていない閉域網(G-Net2)でやり取りされます。

これらドキュメント類の内容は、NTT東西各社が設定した文書閲覧権限により、NTT東西発注の電気通信工事事業に従事する者のみ閲覧可能とされています。「NTT東西の工法・工事規格の内容をネタにして、業界外で働く人と話をする」ことは、守秘義務違反となってしまうため不可能です。

工事規格に関するドキュメントの種類

標準実施方法

NTT東西発注工事の工法・工事規格に関する各種ドキュメントの中でも、最も基本的なドキュメントです。略して「SOP3」とも称されます。

標準実施方法には以下のような特徴があります。

  • 1冊のドキュメントごとに固有の番号を持つ
  • 改訂サイクルは数ヶ月から数年に1回

物品規格書

NTT発注工事で使用される材料および機工具類の規格書です。主に材料や機工具類の製造業者が用いるドキュメントですが、閲覧権限を付与された元請工事受注者従業員も内容を見ることができます。

物品規格書には以下のような特徴があります。

  • 1冊のドキュメントごとに固有の番号を持つ
  • 改訂サイクルは数ヶ月から数年に1回

工程図例集

以下のような内容に関するドキュメントです。

  • 工事を行う場合、図面にどのように記載すればよいか
  • 工事に対して適用される工程は何か
  • 工程適用に関するポイント

工程図例集は、年0~1回、工事発注形態・工事種別ごとに発出されます。

工事発注形態 工事種別
一般計画工事 アクセス工事
サービス総合工事 アクセス工事
サービス総合工事 ユーザ工事

rapidliner0.hatenablog.com

技術資料

以下のような内容に関するドキュメントです。

  • 新サービスに関係する設備の概要・設計・工事・工事規格
  • 新工法の概要・設計・工事・工事規格
  • 既存設備・既存工法の改定に関する概要・設計・工事・工事規格

NTT東西各社の全体では、1年に数十文書が発出されます。

基本的な工程・工法に関する技術資料は、最終的には上述標準実施方法に統合されます。

設計・施工情報、およびエンジニアリング情報

NTTの東西の違いにより、この文書カテゴリの名前は異なります。

以下のような内容に関するドキュメントです。

  • 新たな標準実施方法・物品規格書・技術資料の発出について
  • 既存工法の細かい変更について

NTT東西各社の全体では、1年に数十文書が発出されます。


  1. 「一般社団法人 情報通信エンジニアリング協会」の略称です。NTT東西発注工事を元請受注する事業者により構成される業界団体です。

  2. NTTコムウェアにより構築・運営されている、NTTグループ企業向けのイントラネットです。NTT東西発注工事を元請受注する事業者の従業員に対しても、工事を進める上で必要な範囲についての閲覧権限が付与されます。

  3. 読み方は「ソップ」です。英語の「Standard Operating Procedures」の略です。

動画感想…武富士の亡霊に取り憑かれた弁護士【しくじり企業L】~東京ミネルヴァ~


武富士の亡霊に取り憑かれた弁護士【しくじり企業L】~東京ミネルヴァ~

主に「事業」という観点からの感想です。

  • 本質的に終わりが存在する事業の場合、事業の立ち上げ時点から、「事業の畳み方」について計画を持っていなければならない
    • 「過払金返還訴訟」しかり、「天然資源掘削」しかり
    • 「大風呂敷を広げて畳めなくなった」となれば、多くの人に迷惑をかける
  • そもそも「その事業は、いつか本質的な終わりがやってくる類の事業なのか」という事柄についても、よくよく検討しておかねばならない
  • 弁護士は、法律のプロではあっても経営のプロではない
    • 経営以外のプロが事業を行なうにあたっては、悪辣な「経営のプロ」によって食い物にされる危険がある
    • 経営以外のプロが新たに事業を立ち上げるにあたっては、「悪い人」を寄せ付けないようにするためにも、最低限の経営知識は必要である

Pythonあれこれ 2021-02-23 - Flaskにおけるリダイレクト等

概要

「Head First Python 第2版」を進めていった中で考えたことの記録です。

Head First Python 第2版 ―頭とからだで覚えるPythonの基本

Head First Python 第2版 ―頭とからだで覚えるPythonの基本

  • 作者:Paul Barry
  • 発売日: 2018/03/24
  • メディア: 単行本(ソフトカバー)

Flaskにおいてリダイレクトを設定する際のPythonコード

from flask import Flask, render_template, request, redirect
from vsearch import search4letters

app = Flask(__name__)

@app.route('/')
def hello() -> '302':
  return redirect('/entry')


@app.route('/entry')
def entry_page() -> str:
  return render_template(
    'entry.html',
    the_title='Web版のsearch4lettersにようこそ!'
  )


app.run()

上記コードをpyコマンドで実行した上で、http://127.0.0.1:5000にアクセスすると、実行されているWebアプリケーションは以下のようなログを返します。

127.0.0.1 - - [23/Feb/2021 09:53:34] "GET / HTTP/1.1" 302 -
127.0.0.1 - - [23/Feb/2021 09:53:35] "GET /entry HTTP/1.1" 200 -

HTTPステータスコードの300番台はリダイレクトを表します。この例では、Webアプリケーションは以下のような動作をしているわけです。

  1. /GETメソッドでアクセスされると、/entryへのリダイレクトを返す
  2. 1.の動作により、/entryへのGETリクエストが送出される
  3. /entryへのGETリクエストが正常に処理される
  4. Webブラウザentry.htmlの内容が返される

redirect関数のインポート

Flaskにおいてリダイレクトを行わせるには、flaskライブラリに含まれるredirect関数を使用します。当然ながら、redirect関数のインポートという操作が必要になります。以下は、redirectを含むflaskライブラリの関数・クラス群をインポートするimport文の例です。

from flask import Flask, render_template, request, redirect

Flaskにおいて複数のWebページのロケーションに同一関数を割り付ける際のPythonコード

Flaskでは、複数のWebページのロケーションに同一の関数を割り付けることも可能です。下記コードは、「entry_page関数を、//entryという2つのリソースに割り付ける」というPythonコードの例です。

from flask import Flask, render_template, request
from vsearch import search4letters

app = Flask(__name__)


@app.route('/')
@app.route('/entry')
def entry_page() -> str:
  return render_template(
    'entry.html',
    the_title='Web版のsearch4lettersにようこそ!'
  )


app.run()

上記コードをpyコマンドで実行した上で、http://127.0.0.1:5000にアクセスすると、実行されているWebアプリケーションは以下のようなログを返します。

127.0.0.1 - - [23/Feb/2021 09:55:47] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [23/Feb/2021 10:11:17] "GET /entry HTTP/1.1" 200 -

この例では、Webアプリケーションは以下のような動作をしています。

  1. /へのGETリクエストが正常に処理される
  2. Webブラウザentry.htmlの内容が返される

/ではなく/entryに直接アクセスした場合も同様の動作となります。

entry_page関数を、//entryという2つのリソースに割り付ける」という記述は、Pythonコード側における以下の記述が対応しています。

@app.route('/')
@app.route('/entry')
def entry_page() -> str:

単純に@app.routeデコレータをentry_page関数の定義の前に2つ書いているだけですね。このように記述しておけば、あとはFlaskが良い感じに処理してくれます。

Pythonあれこれ 2021-02-20 - Webアプリケーションに、テンプレートに基づいたHTMLを返す動作を実装する

概要

「Head First Python 第2版」を進めていった中で考えたことの記録です。

Head First Python 第2版 ―頭とからだで覚えるPythonの基本

Head First Python 第2版 ―頭とからだで覚えるPythonの基本

  • 作者:Paul Barry
  • 発売日: 2018/03/24
  • メディア: 単行本(ソフトカバー)

Webアプリケーションのコード

from flask import Flask, render_template, request
from vsearch import search4letters


# ...略...


@app.route('/search4', methods=['POST'])
def do_search() -> str:
  phrase = request.form['phrase']
  letters = request.form['letters']
  return str(search4letters(phrase, letters))

上記は、Flaskを用いて構築した、POSTリクエストを受け付けるWebアプリケーションの例となります。

コード各部分について解説

HTTPのリクエストデータを扱うためのオブジェクトをインポートする

from flask import Flask, render_template, request

flaskライブラリに含まれる関数・クラスのうち、Flaskクラスとrender_template関数は、これまでに実装してきた機能を使うために必要であった関数・クラスです。

今回新たに、requestという組み込みオブジェクトをflaskライブラリからインポートしています。requestオブジェクトは、HTTPのリクエストデータをWebアプリケーションで扱うために必要となる関数です。

HTMLフォームのデータを新規の変数に代入する

phrase = request.form['phrase']
letters = request.form['letters']

flaskライブラリのrequestオブジェクトには、ポストされてきたHTTPリクエストに含まれるHTMLフォームのデータにアクセスするための辞書属性formが含まれます。request.formの内容はPythonの辞書で、各要素のキーはHTMLフォームの各name属性の値となります。例えば、name属性の値がphraseであるinput要素の内容にWebアプリケーション側からアクセスするためには、request.form['phrase']という属性にアクセスすればよいということになるわけです。

<form method='POST' action='/search4'>
<p>このフォームを使って検索リクエストを送ってください。</p>
<table>
<tr><td>フレーズ:</td><td><input name='phrase' type='TEXT' width='60'></td></tr>
<tr><td>文字:</td><td><input name='letters' type='TEXT' value='aeiou'></td></tr>
</table>
<p>準備ができたら、以下のボタンを押してください。</p>
<p><input value='実行!' type='SUBMIT'></p>
</form>

上述HTMLマークアップは、上述Pythonコードで処理するための入力データを生成するHTMLフォームの例です。このHTMLフォームのSUBMIT処理を実行すると、上述Pythonコードは以下の動作を行います。

  • ポストされてきたHTMLフォームのうち、name属性の値がphraseであるinput要素に入力された文字列を変数phraseに代入する
  • ポストされてきたHTMLフォームのうち、name属性の値がlettersであるinput要素に入力された文字列を変数lettersに代入する

curlコマンド等を用い、当該HTMLフォームにより生成されるリクエストと同等のPOSTリクエストを直接投入することも可能です。当該リクエストの必要条件は以下となります。

  • リクエストの種類がPOSTであること
  • HTMLフォーム形式でエンコードされた、以下のパラメータがリクエストに含まれていること
    • phraseパラメータ
    • lettersパラメータ

作成した変数を別の関数で使用し、その戻り値を得る

return str(search4letters(phrase, letters))

このreturn文に対応する関数do_searchは、「/search4というURLを持つリソースに対するPOSTリクエスト」に割り付けられたものです。前項で内容を定義したphraseおよびletters両変数を引数として、search4letters関数を呼び出しています。結果、当該search4letters関数の戻り値は、POSTリクエストの結果としてWebアプリケーションからWebブラウザに返されることとなるわけです。

実際にPOSTリクエストを行ってみる

WindowsでHTTPのPOSTリクエストを直接投げるためには、curl.exeを用いるのが手っ取り早い方法です。

  • Windows 10 Ver.1803以降であれば、curl.exeは標準で付属している
  • cmd.exeやPowerShellといったターミナルから使うことができる
  • -X POSTというオプション指定で、POSTリクエストを投げるようにする
  • HTMLフォーム形式のパラメータをリクエストに含めたい場合は、-F 'パラメータ名=パラメータ値'というオプションを付ける
    • 複数のパラメータをリクエストに含めたい場合は、-Fオプションを必要な数だけ列挙する

事前に対象となるWebアプリケーションを起動した上で、http://127.0.0.1:5000/search4phraseパラメータとlettersパラメータを含むPOSTリクエストを送出するコマンドを送出してみます。実行結果は、例えば以下のようになります。

PS C:\webapp> curl.exe -X POST -F 'phrase=hogehoge' -F 'letters=aeiou' http://127.0.0.1:5000/search4
{'o', 'e'}

Pythonあれこれ 2021-02-20 - Webアプリケーションに、テンプレートに基づいたHTMLを返す動作を実装する

概要

「Head First Python 第2版」を進めていった中で考えたことの記録です。

Head First Python 第2版 ―頭とからだで覚えるPythonの基本

Head First Python 第2版 ―頭とからだで覚えるPythonの基本

  • 作者:Paul Barry
  • 発売日: 2018/03/24
  • メディア: 単行本(ソフトカバー)

Webアプリケーションのコード

from flask import Flask, render_template
from vsearch import search4letters

app = Flask(__name__)


# ...略...


@app.route('/entry')
def entry_page() -> str:
  return render_template('entry.html',
                         the_title='Web版のsearch4lettersにようこそ!')

app.run()

コード各部分について解説

テンプレートエンジンを使うための関数をインポートする

from flask import Flask, render_template

FlaskによるWebアプリケーションでテンプレートエンジンを使う操作は、flaskライブラリのrender_template関数1に定義されています。Webアプリケーションに「テンプレートに基づいたHTMLを返す」という動作を実装するためには、同関数をインポートする必要があります。

というわけで、flaskライブラリからインポートする関数として、render_templateを新たに追加しています。Flaskクラスのほうは、基本的なWebアプリケーションを定義する段階で既にインポートしていたものです。

テンプレートとキーワード引数に基づき、HTMLを生成して返す関数を定義する

@app.route('/entry')
def entry_page() -> str:
  return render_template('entry.html',
                         the_title='Web版のsearch4lettersにようこそ!')

先程importしたflaskライブラリのrender_template関数を用いて、/entryというURLにアクセスした際に返されるHTMLの内容を定義しています。Webブラウザの利用者側から見た全体動作としては、「第1引数で与えたテンプレートの内容を元にして、内部でJinja2テンプレートエンジンを用い、キーワード引数の内容も含めたHTTPレスポンスボディ内容を返す2」という動作をします。

render_templateの第1引数であるentry.htmlの内容については、下記記事のうち、項「入力フォーム」に記載しています。ベーステンプレートであるbase.htmlは、entry.htmlの内部で呼び出されています。

rapidliner0.hatenablog.com

render_templateのキーワード引数the_titleは、テンプレート中の以下の記述に対応するものです。

<title>{{ the_title }}</title>

↑ベーステンプレートbase.html中のtitle要素の中身

<h2>{{ the_title }}</h2>

↑入力フォームテンプレートentry.html中のh2要素の中身

キーワード引数the_titleが存在することにより、実際に生成されるHTMLのうち、上記2つの要素の内容には「Web版のsearch4lettersにようこそ!」という文字列が設定されることになります。


  1. jinja2ライブラリの使用については、render_template関数が適切に行なってくれます。

  2. 対応するHTTPレスポンスヘッダの内容は、Flask側で適切に生成されます。

Pythonあれこれ 2021-02-17 - Jinja2を使って、入力内容がPythonで処理されるWebページを作成する

概要

「Head First Python 第2版」を進めていった中で考えたことの記録です。

Head First Python 第2版 ―頭とからだで覚えるPythonの基本

Head First Python 第2版 ―頭とからだで覚えるPythonの基本

  • 作者:Paul Barry
  • 発売日: 2018/03/24
  • メディア: 単行本(ソフトカバー)

構築したいWebページはどのようなものか

入力フォーム.svg

↑入力フォームのイメージ

処理結果.svg

↑処理結果のイメージ

上述表示内容のWebページを得るために、以下3つのJinja2テンプレートを定義します。

  • ベーステンプレート
    • Webサイトのルック&フィールを定義する
  • 入力フォーム
  • 処理結果の表示

Jinja2とは

Flaskで用いられるテンプレートエンジンです。Flaskにおいては、以下の目的でJinja2テンプレートエンジンを用いています。

  • HTMLに、既存テンプレートを継承して用いる機能を追加する
  • PythonコードからHTMLの内容の一部を受け取る機能を追加する

jinja.palletsprojects.com

Webページのマークアップについて解説

ベーステンプレート

<!DOCTYPE html>
<html>
  <head>
    <title>{{ the_title }}</title>
    <link rel="stylesheet" href="static/hf.css">
  </head>
  <body>
    {% block body %}

    {% endblock %}
  </body>
</html>

他のHTMLファイルの内容をインポートして使うためのテンプレートです。解説は以下の通りです。

  • Webサイト全体に共通する内容についての記述である
  • 以下の内容のみが定義されている
    • DOCTYPE宣言
      • このHTMLが、HTML5標準に準拠するものであることを示す
    • HTML全体の基底要素であるhtml要素
    • head要素の記述
  • スタイルシートとしては、static/hf.cssというファイルの内容が用いられる
    • 同ファイルが必要である
  • body要素以下の内容は、他のHTMLファイルをインポートすることを前提とする
    • インポートされるHTMLファイルの内容は、{% block body %}から{% endblock %}までの間が置き換えられて埋め込まれる
  • 本ベーステンプレート自身は直接呼び出されない
    • 本ベーステンプレートの記述だけでは、完全な内容のHTMLは構築できない
    • 実際に呼び出されるのは、本ベーステンプレートを継承した各種テンプレートである

入力フォーム

{% extends 'base.html' %}

{% block body %}

<h2>{{ the_title }}</h2>

<form method='POST' action='/search4'>
<table>
  <p>このフォームを使って検索リクエストを送ってください。</p>
<tr><td>フレーズ:</td><td><input name='phrase' type='TEXT' width='60'></td></tr>
<tr><td>文字:</td><td><input name='letters' type='TEXT' value='aeiou'></td></tr>
</table>
<p>準備ができたら、以下のボタンを押してください。</p>
<p><input value='実行!' type='SUBMIT'></p>
</form>

{% endblock %}

入力フォームのHTMLマークアップの内容です。解説は以下の通りです。

  • 上述base.htmlを継承し、その中にインポートされる
    • {% block_body %}から{% endblock %}までの間が、entry.htmlの同内容に置き換えられる
  • Webページのタイトルは、Pythonコードによって与えられる
    • テンプレートの呼び出し元となるPythonの関数には、the_titleというキーワード引数が必要となる
  • 1つのHTMLフォームを定義している
    • 「実行!」ボタンがクリックされると、フォームの入力内容がHTTPのPOSTメソッドによって/search4というリソースに渡される
    • phraseという属性名で、文字列を内容とする属性を渡す
    • lettersという属性名で、文字列を内容とする属性を渡す
    • リソース/search4に割り付けられるアプリケーションには、以下の処理を行う機能が必要となる
      • POSTメソッドのリクエストを受け付ける機能
      • 属性名がphraseで、内容が文字列である属性を処理する機能
      • 属性名がlettersで、内容が文字列である属性を処理する機能

処理結果の表示

{% extends 'base.html' %}

{% block body %}

<h2>{{ the_title }}</h2>

<p>以下のデータを送信しました。</p>
<table>
<tr><td>フレーズ:</td><td>{{ the_phrase }}</td></tr>
<tr><td>文字:</td><td>{{ the_letters }}</td></tr>
</table>

<p>「{{ the_phrase }}から{{ the_letters }}」を検索すると、次の結果を返します。</p>
<h3>{{ the_results }}</h3>
{% endblock %}
  • 上述base.htmlを継承し、その中にインポートされる
    • {% block_body %}から{% endblock %}までの間が、entry.htmlの同内容に置き換えられる
  • Webページのタイトルは、Pythonコードによって与えられる
    • テンプレートの呼び出し元となるPythonの関数には、the_titleというキーワード引数が必要となる
  • 本文中に、Pythonコードによって与えられる表示内容が3つ定義されている
    • 具体的には以下の3つ
      • the_phrase
      • the_letters
      • the_results
    • テンプレートの呼び出し元となるPythonの関数には、以上3つのキーワード引数が必要となる