技術は私たちの力。技術は私たちの楽しみ。 Creative Developer BLOG 技術部ブログ
Technology is our strength. Technology is what we enjoy.

身近な業務にAPIを活用してみた

タイトル画像
2023年4月に入社したシステム部開発ユニットの鈴木です。

入社して丸1年、開発者としていろいろなことを学ばせていただいています。
気になる機能があればやりたいと言いいつもわがままだらけでご迷惑をおかけしているかと思います。すみません!

そんなまだまだ駆け出しエンジニアの鈴木が今回は、
「 API(Application Programming Interface)」 について勉強しみなさんの 作業効率化 のお手伝いができればと思いました。

今回勉強したものはAPIでできることのごく一部であり、まだまだ勉強できる部分があると思いますが、最後まで見ていただけるとAPIとは何者なのか?どんな使い方をするのかを、理解できると思いますのでぜひ最後までお付き合いください!


そもそもAPIって何?

APIとは

APIにはたくさん種類があります。
皆さんも聞いたこと、見たことはあると思いますが。。



何かはわからない。。



GPTに下記の質問を投げてみました。


Q. APIとはなんですか?
A.「便利機能を外部向けに提供する架け橋」のようなものです。


なんだって??
抽象的すぎて何言ってるかわからない。。


聞き馴染みのある「なんたかAPI」で
より具体的に見ていきます!

例えば、YouTubeのAPI

YouTube APIの図

「 YouTubeAPI 」と言うものがあるのですが、
こちらは名前の通りYouTubeのAPIになるので、YouTubeのさまざまなデータを簡単に呼び出すことができるのかな?と思い調査を続けてみました。



するとすごくわかりやすそうな図を発見!
説明図1

左側のパソコンから動画の再生回数を聞いています。


すると、
右側のAPI (YouTubeAPI) 側から 100万回だよ! と結果として返ってきます。



なるほどなるほど。。すごくわかりやすい!
説明図2

続いて2枚目の図、
少し見方を変えて「インターネット通信の流れ(HTTP)」をみてみよう。


こちらも、
左側の「クライアント」からリクエスト(依頼)として送り
右側の「サーバー」にレスポンス(結果)として返してもらいます。


先ほどの図を見た後だと内容が入ってきやすいぞ。



そこで、
そもそもAPIを使うにあたって必要なものはなんなのか調査してみました。
API接続に必要な情報

リクエスト必要情報

メソッドの種類

知ってる単語が並んできたぞ!


まぁ一旦座学はこれくらいにして、、

iPhoneのショートカットアプリで使ってみた①

ここからは実践に入っていきたいと思います。


試しに、
IOSのショートカットでnotionにメモをするショートカットを作ってみます。



こちらの記事では、notionの設定、APIキーの取得については割愛します。
参考動画 : https://www.youtube.com/watch?v=WxrJLkjX-Qo&t=46s

①.Notionで取得したインテグレーショントークンを記入

②.①のテキストを、「APIキー」と設定する

③,Notionで作成している URLの「so/⚪︎⚪︎⚪︎⚪︎⚪︎?xx」の⚪︎部分をテキストに記入

④,のテキストを、「DB名」と設定する

⑤,タスク名を表示させる

⑥,「URL」で「https://api.notion.com/v1/pages」と入力

⑦,URLを取得

⑦の詳しい内容

完成しました!
実際に使ってみるとちゃんとメモに入り、iPhoneからも実行ができる。


APIとはこういうことか!と少しづつ理解度が上がってきました。


もうここまで来ると楽しくなってきて止まらない。

WorksからBacklogの起票をしてみた

せっかくなら、自身の業務も効率化してみようと思い
BacklogAPIと連携したWorksアプリを作成してみました。



まず、「 BacklogAPI 」が使えるかどうかAPItesterを使っていじってみよう。

①. 最初に、「個人設定」にある「API」からキーを発行してみる

②. モザイクかけてますけど、発行されたら「APIキー」をコピーしてメモしておく

③. 自社で使っているBacklogのURLに、先ほどのAPIキーを埋めて、


記入欄 : https://interpark.backlog.jp/api/v2/issues?apiKey=(APIキー)


実行すると、Responseが「 OK 」正常にGETできてますね。


よし! アプリを作ってこよう。。


...5分後
アプリ画面

各項目を入れて、レコードの登録をしてみると、、
起票画面

起票完了!! おお〜!!
※ この瞬間が一番API連携できたなって感じました


使えるBacklog API一覧はこちら
URL : https://developer.nulab.com/ja/docs/backlog/api/2/add-issue#



ここからは、カスタムコード内で書いたコードを解説していきます。

ソースコード

function BacklogPost() {
// リクエストパラメータを定義
var projectid = document.querySelector('select[name="projectid"]').value;
var ticketname = document.getElementById('ticketname');
var issuetypeid = document.querySelector('input[name="issuetypeid1"]:checked').value;
var priorityId = document.querySelector('input[name="priorityid1"]:checked').value;
var assigneeIdSelect = document.getElementById('assigneeid1');
var assigneeId = assigneeIdSelect.options[assigneeIdSelect.selectedIndex].value;
var description2 = document.getElementById('text02').value;
var phenomenon = "**" + "確認した現象" + "\n" + description2;
var description3 = document.getElementById('text03').value;
var errorCode = "**" + "エラーコード" + "\n" + description3;
var description4 = document.getElementById('text04').value;
var expectedResults = "**" + "期待される結果" + "\n" + description4;
var description5 = document.getElementById('text05').value;
var cause = "**" + "発生環境" + "\n" + description5;
var description6 = document.getElementById('text06').value;
var procedure = "**" + "再現手順" + "\n" + description6;
var description7 = document.getElementById('text07').value;
var remarks = "**" + "備考" + "\n" + description7;

var combinedDescription = phenomenon + "\n" + errorCode + "\n" + expectedResults + "\n" + cause + "\n" + procedure + "\n" + remarks;

// Backlogの指定の項目にあてはめる
const requestData = {
"projectId" : projectid,
"summary" : ticketname.value,
"description": combinedDescription,
"issueTypeId" : issuetypeid,
"assigneeId" : assigneeId,
"priorityId" : priorityId
};

// HTTPリクエストを送信する関数
async function sendRequest() {
try {
// APIキー
const response = await fetch('https://(実行したいBacklogのURL)?apiKey=(APIキー)', {
// HTTPメソッド
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(requestData)
});

if (!response.ok) {
throw new Error('Network response was not ok');
}

const responseData = await response.json();
console.log(responseData); // APIのレスポンスをコンソールに出力
// レスポンスを使った追加の処理をここに追加する
} catch (error) {
console.error('There was a problem with the fetch operation:', error); // エラーメッセージをコンソールに出力
// エラーが発生した場合の処理を記述
}
}

// ページのロードが完了したときにHTTPリクエストを送信する
sendRequest();
}

window.addEventListener('load', function() {
// submitボタンの要素
var submitButton = document.querySelector('input[name="Submit"]');

// ボタンがクリックされた時の処理を設定
submitButton.addEventListener('click', BacklogPost);
});
ソースコード的にはそこまで難しくはなく、


1.画面上にある「ボタン、プルダウン、1行テキスト」などのデータを取得


2.BacklogのAPIで指定された形の中に当てはめるだけ!


3.HTTPリクエストをする処理を記載。
(今回起票させたいので、リクエストは「POST」)


4.Submitボタンが実行されたときに実行させるよう指定

最後に

今回、APIは「聞いたことあるけど全く知らない。」
と言う状態から勉強を始めてみました。



APIについて感じたこと
   ・ものすごく使いやすく、思ったよりも難しい内容ではなかった
   ・難しいのはリクエストの処理やリクエストが通らなかったときの
    エラーリング処理


よかったこと
   ・APIについての理解度が全くなかったので今回の挑戦はものすごくよかった


苦労したこと
   ・Worksの項目を取得するのが一番難しかった


もう少し試したかったこと
   ・Backlogの起票で期限日の指定ができていないので再チャレンジしたい
   ・Backlogの起票で今回は登録だけだが、修正、削除もやってみたい
   ・もう1つレコード登録、修正、削除の動作をテストするアプリを作っていた
    がWorks側で処理を書く必要があり断念したがチャレンジしたい






APIの使い方を理解し、自由に使えるようになればさまざまなアイデアが実現しやすくなると思います。

皆さんも是非APIを使って何かを作ってみてはいかがでしょうか。
記事一覧へ