プログラミングにまつわる今昔物語
はじめに こんにちは。Colorkrew(以下CK)の老人プログラマー TORIIです。 さて今日はColorkrewプログラミング老人会のトップ3(正確にはよくわからない)である私からプログラミングにまつわる今昔な話をしたいと思います。 実際のところ世の中のプログラミング老人会的にはまだまだ私なんぞ若造もいいところなのですが、最近我が社では若くてフレッシュでピッチピチなエンジニアが続々と増えたのに対し老人層が心持ち減ってしまい気がついたらそうなっていたのです。ただ座っていたらそうなっていたのです。実に不思議なこともあるものです。 では早速始めましょう。 第1話 エンジニアとプログラマ 人類開闢以来、上流工程を取り扱うシステムエンジニアと呼ばれている人は大勢いましたが、この10年くらいでプログラムを書くことを生業とするエンジニアと呼ぶ人が随分と増えました。 いやもっと前からそうだったのかもしれませんが、正直いつから増殖を始めたのかよくわかりません。主観的な印象としてはいきなり増えた印象です。それはもうワラワラと。 一体全体、エンジニアとプログラマの違いは何なのでしょうね。 私がエンジニアを自称し始めたのはたしか2010年代の前半だったと思いますがそれ以前は自分をプログラマだと思っていました。 変わるきっかけになったのは名刺に役職を記載するときに会社のルール上「プロデューサー」と書きなさいと言われ「いや違うし」と抗議し調整した結果、上長と相談の上決めることとなった時に、最初「なんちゃってプログラマ」にしたいと言ったところ何故か却下されたので、渋々「ソフトウェアエンジニア」と書いた、というのがきっかけです。 一般的によく言われているプログラマとは誰かが作った設計書をもとにコーディングとか修正しかしない人を指すらしいです。あるいはマネジメントをしない人だとか。 エンジニアの方は俗説では工学系の学位を持った人のことだという説もあったようで、実際海外では学位がないとIT系に就職しづらい国もあるらしいです。 日本ではもちろんそんな学位は必要ありません。小学生でもエンジニアを自称できます。 本当に業界や状況・文脈によって変わってくるし、今はプログラムを書かないIT職種も多数ありそれらもエンジニアと呼ばれるので、プログラムを書く人間にとっては基本的には気分の問題(プログラマというよりエンジニアと言ったほうがすごそうに聞こえる)であってそういう様々なIT系の職種を含めた総称と考えるのが良さそうですね。 そういうわけで今ではすっかり私もエンジニアと呼んでいます。でも心では永遠のプログラマなのです。 第2話 タブとスペースと括弧 ソースコードのインデントにタブとスペースどちらを使うのか、というお話です。 前はタブが多かった印象でしたが、今はほぼスペースが用いられていますね。なんだか知らないうちに決着がついていました。いやびっくりですね。 タブの問題点は構造化以外の目的で使うとレイアウトが崩れるところにあるのはわかっています。 でもスペースはスペースで、スペース/バックスペースN回押して書いていくのは面倒ですし、回数を間違えるとインデントがずれます。コピペの時にカーソルの位置がずれることもあります。 え? タブキーを押すだけだろうって? それはエディタの力(ソフトタブ)ですね。 優秀なプログラミングエディタを使った場合ほぼ問題は起きません。普通のプログラミングエディタの場合だとうっかりスペースの途中からコピーしたりすると1文字過不足のあるインデント行が発生したりします。1文字ズレだと結構気づかないんですよね。 最悪なのでがソフトタブ自体がないチープなエディタしか使えない場合で、N回スペースを連打しないといけないため「スペースをインデントで使うことを指示した奴は何を考えてるんだ」と呪いたくなるほどの苦痛と化します。 まぁ、そんな環境今では稀なのでスペースで全く問題ありませんね、ええ。 年に何回かは部分的に1文字過不足のあるインデントになってしまうことがあるにはあるのですが、見かけたら直すくらいで存在自体は特に気にしないことにしています(あ、見かけたらプルリクエスト出しておいてくださいね)。 同じような話でifやforなどの制御文の括弧の開始位置をどこにするのか、という話もありますね。制御分と同じ行の最後に書くか次の行に書くかというアレです。 今はC#とかの一部の言語以外は制御文と同じ行に書くのが主流らしいですね。 私もプログラムを書き始めた時は制御文と同じ行に書いていましたが、一番最初の仕事でやったプロジェクトで括弧の開始と終了の位置が離れると対応が合わなくなるエラーが頻発したことがありました。この書き方だとどこの括弧が不足・過分になっているか・インデントがおかしいのか一見して全くわからないのです。 まぁそんな位置が離れてるような制御文を書くな、関数化しろという話ではあるのですが、若気の至りなのです。 switch文のラベルの数が1000だったかそこらまでしか対応していないコンパイラなのに、それを超えてしまって謎の不具合が発生したことがあるくらい、そんなへっぽこコンパイラと同レベルのアホだったのです。 そこで、次の行に括弧の開始を書くというスタイルに変えました。 すると途端にそんな間抜けなエラーは起きなくなりました。次の行に括弧開始がなければインデントされないので一目見るだけでどこに異常があるのかわかるからです。最高です。 以来ずっと個人で書くときはその書き方をしています。 でも今の世の中はそんな最高の書き方はしないようです。恐らく括弧の開始行だけで1行消費するのが許せないのが一番の要因だと思いますが、(エディタの力などで)括弧の対応が取れなくなるようなことが起きにくくなっているのでしょう。 まぁタブ・スペースの話も括弧の話も今はどんな書き方をしたとしても、保存した瞬間にエディタによってプロジェクトで定められたフォーマットに従って自動的に修正されるので、書くだけならどんなスタイルで書いても良いというのはいい時代になりましたね。 第3話 ライセンス表記 私がまだピッチピチの新人だった頃、新人研修でソースコードの先頭には会社名のライセンス表記を書きなさいと教わりました。 日本の著作権法的には書かなくても良いのですが、どうせファイルの説明文を載せるのだからついでに書いておけば良い、というくらいの認識でした。 しかしこのWeb業界、というかColorkrewではオープンソースのソースコードにはしっかりとしたライセンス表記はあれど、自分達で書いているソースコードにはライセンス表記を書いているのを見たことがありません。ファイルの内容を説明するヘッダも見たことがありません。(*1) 記述する風習自体がないようです。最初は不思議に思っていたのですが、最近は書かなくてもいいかな、と思い始めてきました。 書かなくても著作権は成立するし、万が一ソースコードが漏れた場合……とか思ったので。 でも自社プロダクトのソースコードにはきちんとつけておいた方がいいんじゃないかな、と思う今日この頃です。 さいごに 駄文を書き連ねて参りましたが、好評であれば続くかもしれません。 弊社Colorkrewのプログラミング老人会では会員……もとい社員を随時募集中でございます。...All You Need to Know about Lazy Evaluation in Spark
Few would disagree that the word “lazy” has a negative connotation. We usually describe someone who is not willing to work hard as lazy. However, not all laziness is undesirable, and sometimes we prefer laziness to diligence, especially in the computer science world. One example is lazy evaluation. Today, we will closely inspect why lazy evaluation is essential to Spark’s high performance and how lazy evaluation works in Spark....Parquet Files: Smaller and Faster than CSV
If you have been in the world of big data long enough, you probably have heard about Parquet files. You might even have used it while thinking to yourself: “why can’t we just use CSV files?” Today, I will debunk the mystery of Parquet files and explain why a growing number of data scientists prefer Parquet files to CSV files....Actions, Narrow Transformations, and Wide Transformations
Hi! My name is Ziyu Chen. I am a full-stack engineer at Colorkrew. I love learning and writing about data engineering. Today, I would like to discuss transformations and actions in Spark. Of course, you can dive into the world of Spark and perform ETL processes without knowing how they differ from each other....Dependency Injection with Laravel
Dependency Injection - With Laravel Dependency injection is a commonly used design pattern in object oriented programming. Through some pre-established conventions, we are able to manage the creation of our dependencies more easily. We can declare, replace, or even mock the dependencies as needed without the need to change the code that relies on the dependency....今更聞けないシリーズ#4 Azure Cognitive Services ~視覚分野編~
以前の記事では、Azure Cognitive Services全般の内容を取り上げました。 今回はその中で視覚分野サービスについて、そのサービスの内容と気になる課金体系について紹介したいと思います。 試してみたいサービスが以下のURLから試すことができるので、是非アクセスしてみてください。 Hands on with AI Azure Cognitive Services 視覚分野とは 以前紹介した通り、視覚分野では、主に画像を理解(解析)することができます。 例えば次のようなことができます。 - 画像に写っているのは犬か猫かの判定 - レシート画像から何をいくらで買ったのかを検出 - 画像に写っている自社ログの検出 視覚分野のサービス 視覚分野のサービスは3つあります。 Computer Vision Computer Vision では画像や動画の中から、文字や人、モノなど画像に何が写っているのかを自動判定することができます。 例えば、会議で利用したホワイトボードの画像を入力してボード上の文字を認識したり、オフィスの画像を入力してテーブルや椅子の位置、ラップトップコンピュータの位置や人の位置など画像内の人・モノを検出することができます。 Computer Vision の公式HPはこちら 課金体系 Computer Vision の課金体系は、使った分だけの従量課金と事前予約です。 1つの画像からの検出を1トランザクションと定義し、トランザクション数に応じて課金されます。 従量課金の場合は、1000トランザクションごとに課金が発生します。 事前予約の場合は、最低500,000トランザクションまで定額で、その後1,000トランザクションごとに追加料金が発生します。利用規模に応じて定額で利用できる枠を増やすことができます。 Custom Vision Custom Vision は特定のモノが画像にあるないか、あるならどこにあるかを検出することができます。 Computer Vision と似ているのですが、大きな違いはCustom Vision では独自に検出したいモノを学習することができます。Computer Vision はMicrosoftが用意した検出用モデルを利用するのに対して、Custom Visionはユーザが独自に画像を学習させて検出用モデルを作り、利用することができます。 例えば、自社のロゴや製品を事前に登録して、画像から登録したロゴや製品を検出する用途に利用できます。また、製品を複数登録することで、画像に含まれている製品は何かの判別に利用することもできます。 加えて、Custom Visionでは、作成した検出モデルをダウンロードしてオフラインで利用することもできます。 Custom Visionの公式HPはこちら...The Power of TypeScript Types
Any frontend developer knows the frustration of seeing the infamous “is not a function” message pop up. It reminds you that, even though your code might achieve your goal, you will not be able to assure its consistency or reliability. Without strict typing there is no stopping tiny slip-ups due to a lack of coffee - or sleep, depending on your dedication....今更聞けないシリーズ#3 Azure Cognitive Services ~言語分野編~
以前の記事では、Azure Cognitive Services全般の内容を取り上げました。 今回はその中で言語分野サービスについて、そのサービスの内容と気になる課金体系について紹介したいと思います。 Azure Congnitive Services 言語分野とは 以前紹介した通り、言語分野では、主に文章の内容を理解(解析)する機能をサービスに取り入れることができます 言語分野ではその書き起こした文章の意味を理解し、次の行動につなげることができます。 以下のようなことができます。 チャットボットにおいてユーザの入力したメッセージを理解して会話を続ける ある文章を入力してその中で重要な単語をピックアップする 大量のドキュメントの翻訳 言語分野の公式HPはこちら 言語分野のサービス 音声分野のサービスは5つあります。 Entity recognition(エンティティの認識) Entity recognitionは文章から日付や製品に関する特定の情報といったキーワードを抽出できます。 例えば、日付を表す単語 ”明日”や”明後日”、”8月9日”、“8/9” など様々な言い方で表現される日付を文章から見つけることができます。 この機能を使って、例えばチャットのやりとりの中で会議召集を自動で作成したり、チャットを用いた予約システムで予約日を抽出することができます。 また、Entity recognitionはインターネットへの接続がない環境でも利用することができます(別途申請が必要)。 課金体系 Entity recognition の課金体系は、使った分だけの従量課金と事前予約です。 1文章(最大1000文字)を1テキストレコードを定義し、1テキストレコードあたりで課金されます。 従量課金の場合は、1000テキストレコードごとに課金が発生します。 事前予約の場合は、最低100万テキストレコードまで定額で、その後100テキストレコードごとに追加料金が発生します。利用規模に応じて定額で利用できる枠を増やすことができます。 Sentiment analysis(評判分析) Sentiment analysisは文章から意見や感情を評価分析できるサービスです。 ソーシャルメディア(SNS)に投稿される自社製品や自社ブランドの評判やECサイトに投稿されるカスタマーレビューを分析し、その製品や自社に対して肯定的なのか否定的なのかを自動判断できます。 肯定的または否定的の指標は数字で表されるので、特に肯定的な意見や否定的な意見などを効率的に収集し次に活かすことができます。 先ほどのEntity recognitionと組み合わせることで、肯定的な中でも評判が良い機能をリストアップすることができます。 また、Sentiment analysisはインターネットへの接続がない環境でも利用することができます(別途申請が必要)。 課金体系 Sentiment analysis の課金体系は、使った分だけの従量課金と事前予約です。 1文章(最大1000文字)を1テキストレコードを定義し、1テキストレコードあたりで課金されます。 従量課金の場合は、1000テキストレコードごとに課金が発生します。 事前予約の場合は、最低100万テキストレコードまで定額で、その後100テキストレコードごとに追加料金が発生します。利用規模に応じて定額で利用できる枠を増やすことができます。...今更聞けないシリーズ#2 Azure Cognitive Services ~音声分野編~
前回の記事では、Azure Cognitive Services全般の内容を取り上げました。 今回はその中で音声分野サービスについて、そのサービスの内容と気になる課金体系について紹介したいと思います。 Azure Cognitive Services 音声分野とは 以前紹介した通り、音声分野では、主に”話す・聞く”といった機能をサービスに取り入れることができます。 用意したテキストを音声に変換して読みあげたり、ユーザーの音声をテキストファイルに書き起こすことができます。 例えば、音声分野を用いることで、プレゼンテーションにおいてプレゼンターが話した内容をそのままテキストデータに書き起こしたり、逆に用意した原稿をコンピュータに読みあげさせたりできます。 音声分野の公式HPはこちら 音声分野のサービス 音声分野のサービスは4つあります。 Speech to Text Speech to Text は音声をテキストに変換します。いわゆる文字起こし・ディクテーションと呼ばれる機能です。 Speech to Text に音声データを入力すると、テキストデータが出力されます。音声データをクラウドにあげることはできないニーズにも対応できるオプションもあります。 また、工事現場や工場など環境音が大きいユースケースに対するチューニングもできます。 例えば、会議の発言ログの自動生成で利用できます。 Speech to Text の公式HPはこちら 課金体系 Speech to Text の課金体系は、使った分だけの従量課金です。 テキストに変換する音声データの時間に対して、1時間ごとに課金が発生します。 Text to Speech Text to Speech はテキストを音声に変換します。いわゆるコンピュータによる読み上げ機能です。 Text to Speech にテキストデータを入力すると、音声データが出力されます。 音声はサービス側でプリセットが用意されていますが、独自に読み上げスピードや抑揚を調整することでより滑らかで自然な表現もできます。 例えば、音声チャットサービスの受け答えや受付の音声案内、動画のナレーションに利用できます。...今更聞けないシリーズ#1 Azure Cognitive Servicesとは
近年、世の中でDXが注目される中で、ColorkrewでもDXに関するお問い合わせを数多くいただいております。 その中でもお問い合わせの多いAzure Cognitive Servicesについて、どんなサービスなのか、どんな課金形態なのかをシリーズを通してご紹介したいと思います。 第一回目は、そもそもAzure Cognitive Servicesってなんなんだ?をテーマにお届けします。 Azure Cognitive Servicesとは Azure Cognitive Servicesとは、AIの民主化を掲げるMicrosoft 社が提供するAIパーツのサービス群です。 機械学習で課題となる”データの蓄積”や”学習”のプロセスをなるべく簡略化し、サービスに対して簡単にアプリにAI機能を取り入れることができます。 Azure Cognitive Servicesの公式HPはこちら Azure Cognitive Servicesってどんなことができるの? Azure Cognitive Servicesは主に4つの分野に分かれています ・ 音声 ・ 言語 ・ 視覚 ・ 判断 音声分野 技術例:音声分析、音声生成 音声分野では、主に”話す・聞く”といった機能をサービスに取り入れることができます。 用意したテキストを音声に変換して読みあげたり、ユーザーの音声をテキストファイルに書き起こすことができます。 例えば、音声分野を用いることで、プレゼンテーションにおいてプレゼンターが話した内容をそのままテキストデータに書き起こしたり、逆に用意した原稿をコンピュータに読みあげさせたりできます。 言語分野 技術例:テキスト解析、自然言語処理、形態素解析 言語分野では、主に文章の内容を理解(解析)することができます。 音声分野では、単に音声を文字として書き起こすだけだったのに対して、言語分野ではその書き起こした文章の意味を理解し、次の行動につなげることができます。 例えば、言語分野を用いることで、社内のヘルプデスク窓口のチャットで質疑応答の自動化ができます。 視覚分野 技術例:画像解析、画像分析、物体検出、OCR 視覚分野では、主に画像を理解(解析)することができます。 画像に写っているのは猫か犬かの判定や、レシートの画像から何を買ったかなど画像の内容を理解(解析)することができます。 例えば、視覚分野を用いることで、画像に写っている自社のロゴを検出などに利用できます。 判断分野 技術例:異常検知、文章検出 判断分野では、主に監視や問題の早期検出をすることができます。 製品の異常を早期に発見したり、自社サイトの異常なアクセスの検出など、日々変化するデータを理解(解析)することができます。 例えば、判断分野を用いることで、特定の投稿に対して、不快または好ましくない文章を検出することができます。...自社サービス Mamoru Biz で AKS 導入1周年で振り返る
こんにちは。Azure Cloud Solution Architect の秋山です。 今回の記事では自社サービスで AKS 導入を始めて1年が経ち、どうやってきたか、何が変化したのかについて書きます。 1年前に書いた Azure Kubenetes Service(以下 AKS) 移行の記事は以下です。 Vol.1 App Service から AKS へ移行の決断 Vol.2 AKS(k8s) 移行の下準備 Vol.3 AKS(k8s) 移行 AKS クラスターバージョンの更新管理 AKS では最新バージョンから2世代前までのマイナーバージョンをサポート対象としているため、 4-5カ月周期でリリースされるマイナーバージョンをキャッチアップする必要があります。 参考:AKS Kubernetes リリース予定表 Mamoru Biz では AKS クラスターをインプレースアップグレードと呼ばれる手法で更新しています。 システムが利用中のクラスターのバージョンをアップグレードし、ノードを順にアップグレードする方法です。 参考:Azure Kubernetes Service (AKS) クラスターのアップグレード もう一つ Blue/Green デプロイメントと呼ばれる手法も検討しましたが、利用していません。 下の図のように、現行クラスターに加えて新バージョンのクラスターを用意し、Front Door や Traffic Manager などで切り替える方法です。...データ基盤向けPaaS『Azure Databricks』の費用を知ろう
こんにちは、Azure担当の原です。 今日は、最近お勧めする機会の増えたデータ基盤向けPaaS『Azure Databricks』の料金体系をご案内します。 Azure Databricksは機能面、性能面とも優れたお勧めのサービスです。 料金体系を把握することで、安心してより積極的にご活用頂けるのではないでしょうか。 ※文中に掲載した価格は2022年3月~4月時点のものです。 Azure Databricksそのものについては公式ドキュメントをご覧下さい Azure Databricks とは | Microsoft Docs Azure Databricks利用料金の全体像 Azure Databricksの利用料金は、大きく分けて①Azureリソース利用料、②Databricksソフトウェア利用料、の二つで構成されます。 Azureリソース利用料について Azure Databricksを利用する際には、下図のようなリソースがAzure上に展開されます。 図の左側「データレイク」は、Azure Databricks固有のリソースではなく、利用者が保有するデータを蓄えるストレージアカウントを指します。 右側の「Databricksワークスペース」の枠内が、Azure Databricks利用時に生成されるリソースです。 「利用者のSubscription」が利用者から見える場所に生成されるリソースです。 Azure Databricksによって自動で生成・削除されますが、リソースそのものは通常の仮想マシンやディスク、ストレージなどで、Azureの価格表に沿った金額が課金されます。 「Microsoft管理Subscription」に存在するリソースは利用者から見えず、明示的な課金対象にもなりません。 出典: 仮想ネットワークを管理する - Azure Databricks | Microsoft Docs Azure Databricksソフトウェア利用料について Azureリソースの他に、Databricksソフトウェアの料金が発生します。 単位は「Databricks Units(DBU)」で、1DBUのノードを1時間動かした場合の価格は以下のようになっています。 実際の課金は秒単位で計算されます。 クラスター料金を計算してみる それでは料金を計算してみましょう。 Azure Databricksのデータ処理はクラスターで行います。 クラスターにもいくつかのタイプがありますが、ここではSQL Compute用途のクラスターを用います。 SQL Computeクラスターはサイズとワーカーノード数の組み合わせが下表のようにプリセットされています。...Microsoft Japan Digital Days 開催中!
こんにちは。 Azure Cloud Solution Architect の原です。 ただいま絶賛開催中のオンラインイベント『Microsoft Japan Digital Days』にて、2つのセッションで登壇させて頂きました。 Microsoft Japan Digital Days https://www.microsoft.com/ja-jp/events/top/digital-days ブレイクアウトセッション: ”世界のシゴトをたのしくする” をビジョンにクラウド事業を手掛ける Colorkrew が D365 Business Central の導入で実現したこと 2021年10月13日(水) 14:35 - 15:00のBusiness Applicationsトラックにて、弊社のDynamics 365 Business Central導入事例について、株式会社パシフィックビジネスコンサルティングの吉島さん&スペシャルゲストでお話しさせていただきました。 もともと販売管理システムの老朽化をきっかけに始まった弊社内のリニューアルプロジェクトがD365BCと出会ってどうなったか、そして「ノンカスタマイズ」での導入をどうやって実現したか、Power Platformとどのように連携したのか、と言ったことをご紹介いたしました。 プロジェクト中には何度か「これはちょっと厳しいかな?」という局面もありましたが、関係者で知恵と技術を持ち寄ってクリアできた経験は、いま振り返ると「チームColorkrew」にとっても大きな財産になったと感じています。 弊社も100名ちょっとの所帯で、当初は「ERP導入なんて理念先行過ぎて過剰投資になっていないだろうか?」と悩む時期もありましたが、進めて良かったと思えるプロジェクトになりました。導入プロジェクトを支えていただき、また事例発表という形で振り返りの機会を頂いた株式会社パシフィックビジネスコンサルティング様、ありがとうございました。改めてお礼申し上げます。 国内/海外へのERP導入をサポート | 株式会社パシフィックビジネスコンサルティング https://www.pbc.co.jp/ 特別編集版を後日イベントサイトにて配信しますので、詳しいことが分かりましたら改めてご案内いたします。 パートナーセッション: DX実現の礎~クラウドで実現するデータ基盤構築事例のご紹介 一方、パートナーセッション会場の『Industry Innovation ~インダストリー DX~』にて、弊社くらまね『データ分析基盤構築支援』の事例をご紹介しております。 データ分析基盤構築支援 | くらまね https://kuramane....CI/CD の推進について ~ Azure Data Factory ~
こんにちは。 Azure Cloud Solution Architect の秋山です。 今回は推進している CI/CD の取り組みについて、 Azure Data Factory(以下、ADF) を取り上げて紹介します。 ADF そのものの紹介については今回は触れません。少し古いですが以前ハンズオンしたときの記事がありますので、参考にしてください。 Azure Data Factory 入門ハンズオンの資料を公開します なぜ CI/CD を推進しているのか みなさんは時間を持て余してますか? 私はいつももっと欲しいと思うことが多いです。 もし時間が袋詰めで売ってたら買いたいくらいです。 そんな有限で平等なリソースである時間を有効活用するためにも、 CI/CD の推進は重要です。 開発/検証/本番環境の3環境があるプロジェクトにおいて、開発環境より後述の環境に対しては、開発環境と同じ成果物を自動的にデプロイしたい、というニーズがあります。 その背景は、開発環境で修正したバグが検証/本番環境で発生してしまうといったつまらない問題を回避したい、というものです。 もしも人が3環境を手動でデプロイしていると、こういったつまらない問題がかなりの頻度で発生してしまいます。 人はミスをする生き物なので、避けがたい問題に時間を費やすのではなく、価値を生み出すことに時間を割きたいものです。 Azure Data Factory の CI/CD 構築例 構成イメージとしては以下のとおりです。 開発者は開発環境の ADF の開発ポータルを操作して開発します 開発者は開発の区切りで publish を行います publish を行うと、 ARM Template が Azure Repos に Commit されます Commit によって Azure Pipelines がトリガーされると、ARM Template を使って検証/本番環境の ADF にリソースをデプロイします 開発者は環境差異を ARM Template Parameter で管理して適宜更新します 参考: https://docs....