<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Teams &#8211; まったりエンジニア</title>
	<atom:link href="https://javeo.jp/tag/teams/feed/" rel="self" type="application/rss+xml" />
	<link>https://javeo.jp</link>
	<description>ほどほどレベルのプログラミング</description>
	<lastBuildDate>Wed, 10 Jun 2026 23:07:58 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.1</generator>

<image>
	<url>https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2-32x32.png</url>
	<title>Teams &#8211; まったりエンジニア</title>
	<link>https://javeo.jp</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Python】TeamsにWebhookで自動通知する方法【2026年版】</title>
		<link>https://javeo.jp/teams-notify/</link>
					<comments>https://javeo.jp/teams-notify/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Fri, 05 Jun 2026 14:38:43 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Teams]]></category>
		<category><![CDATA[自動化]]></category>
		<guid isPermaLink="false">https://javeo.jp/teams-notify/</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/06/teams-notify-1024x538.jpg" class="webfeedsFeaturedVisual" /></p>PythonでTeamsに自動通知 旧Incoming Webhookの廃止を受けて、Power Automate WorkflowsのWebhookにAdaptive CardをPOSTする手順とサンプルコードまでまとめました]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/06/teams-notify-1024x538.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<p class="wp-block-paragraph">Pythonでバッチを組むと、処理結果やエラーをどこかに通知したくなります、メールだと埋もれがちなので、普段使っているチャットに飛ばしておくと見落としが減って便利です</p>



<p class="wp-block-paragraph">会社のやり取りがTeams中心なら、Teamsに通知できると確認の手間が減ります、ただ少し前まで手軽だった<strong>Incoming Webhook</strong>(Office 365 コネクタ)は段階的に廃止が進んでいて、新しく作るなら今は<strong><span class="swl-marker mark_yellow">Power Automate Workflows</span></strong>で用意するのが公式の推奨です</p>



<p class="wp-block-paragraph">以前<a href="https://javeo.jp/chatwork-notify/" target="_blank" rel="noopener noreferrer">ChatworkにPythonから通知する記事</a>を書きましたが、今回はそのTeams版です、Workflowsで発行したWebアドレスにPythonからJSONをPOSTするだけなので、流れはChatworkのときと近いです、この記事ではWebhookの作り方から実際に送るサンプルコードまでまとめてご紹介します</p>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">難しいプログラムは要りません、Workflowsで1つWebhookを作って、Pythonから数行POSTするだけなので身構えなくて大丈夫です</p>
</div></div>



<h2 class="wp-block-heading">Teams通知の仕組み</h2>



<p class="wp-block-paragraph">先に全体像をつかんでおきます、やることはシンプルで、<strong>Workflows</strong>で作った<strong>Webhook URL</strong>(専用のWebアドレス)宛てに、Pythonからメッセージの中身をJSONでPOSTすると、指定したチャネルにカードとして投稿される、という流れです</p>



<ul class="wp-block-list is-style-num_circle -list-under-dashed">
<li>Teamsの<strong>Workflows</strong>でWebhookを作る(Webhook URLが発行される)</li>



<li>Pythonからその<strong>Webhook URL</strong>にメッセージをJSONでPOSTする</li>



<li>指定したチャネルにメッセージが投稿される</li>
</ul>



<p class="wp-block-paragraph">送るデータの形は<strong><span class="swl-marker mark_yellow">Adaptive Card</span></strong>という、Teamsが受け取れるカード形式のJSONです、見た目はあとから整えられますが、まずは1行のメッセージを送るところから作っていきます</p>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">昔の<strong>Incoming Webhook</strong>は宛先のURLさえ知っていれば誰でも投稿できる作りで、セキュリティ面が心配されていました、Workflowsは作った人のフロー(自動処理)を経由して投稿する形になっていて、そのあたりが置き換わった理由とされています</p>
</div></div>



<h2 class="wp-block-heading">WorkflowsでWebhookを作る</h2>



<div class="wp-block-group is-style-big_icon_caution"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">はじめに前提です、Workflows(Power Automate)を使うには<strong><span class="swl-marker mark_yellow">職場または学校アカウント(Microsoft 365)</span></strong>が必要です、個人用のMicrosoftアカウント(outlook.comなど)ではPower Automateが使えず、WorkflowsアプリがTeamsのメニューに出てこないので、会社や学校のTeamsで用意してください</p>
</div></div>



<p class="wp-block-paragraph">まずはTeams側でWebhookを用意します、公式に用意されているテンプレートを選ぶだけなので、プログラムの知識は要りません、手順は次のとおりです</p>



<div class="swell-block-step" data-num-style="circle">
<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">Workflowsアプリを開く</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">Teamsの左側のメニューから<strong><span class="swl-marker mark_yellow">Workflows</span></strong>アプリを開きます、見当たらないときは左メニューの一番下にある<strong>アプリ</strong>から<strong>Workflows</strong>を検索すると出てきます</p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">テンプレートを選ぶ</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">テンプレートの一覧から<strong><span class="swl-marker mark_yellow">Webhook 要求を受信したらチャネルに投稿する</span></strong>(英語表記だと Post to a channel when a webhook request is received)を選びます</p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">フロー名を入力する</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">このWebhookの名前(フロー名)を入力します、あとから自分が見て分かればいいので、バッチ通知用のような名前を付けておくと管理が楽です</p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">投稿先のチームとチャネルを選ぶ</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">通知を流したい<strong>チーム</strong>と<strong>チャネル</strong>を選びます、ここで選べるのは<strong><span class="swl-marker mark_yellow">標準チャネル</span></strong>だけなので、非公開チャネルやチャットには直接送れない点に気をつけてください</p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">Webhook URLをコピーして控える</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">作成すると<strong><span class="swl-marker mark_yellow">Webhook URL</span></strong>が発行されます、このURL宛てにPythonからPOSTする形になるので、コピーして控えておきます、画面を閉じたあとに確認したいときは、Workflowsアプリの一覧から該当のフローを開いて見られます</p>
</div></div>
</div>



<div class="wp-block-group is-style-big_icon_caution"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">発行された<strong><span class="swl-marker mark_yellow" style="color:#e8313b">Webhook URLはパスワードと同じ</span></strong>です、このURLを知っていれば該当チャネルに投稿できてしまうので、人に教えたりGitHubなどの公開リポジトリにそのまま載せたりしないように気をつけてください</p>
</div></div>



<h2 class="wp-block-heading">Pythonのプログラム</h2>



<p class="wp-block-paragraph">Webhook URLが用意できたら、あとはPythonから送るだけです、URLはコードに直書きせず<strong>.env</strong>ファイルから読み込む形にしています、こうしておけば値を差し替えるのも楽ですし、うっかり鍵を公開してしまう事故も防げます</p>



<p class="wp-block-paragraph">まず読み込みに使う<strong>python-dotenv</strong>を入れておきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>pip install python-dotenv</code></pre></div>



<p class="wp-block-paragraph">次にプロジェクトの直下に<strong>.env</strong>を作って、さっき発行された<strong>Webhook URL</strong>を書いておきます、変数名は<strong>TEAMS_WEBHOOK_URL</strong>にして、値だけ(URLそのもの)を書きます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>TEAMS_WEBHOOK_URL=発行されたWebhook URL</code></pre></div>



<div class="wp-block-group is-style-big_icon_caution"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">作った<strong>.env</strong>は<strong>.gitignoreに入れて</strong>、GitHubなどにアップしないようにしておきます、.gitignoreはGitに「このファイルは管理しないでね(=GitHubにもアップしないでね)」と伝えるためのリストです、これで鍵をコードに直書きせず、リポジトリにも残さずに済みます</p>
</div></div>



<p class="wp-block-paragraph">本体のコードがこちらです、ステータスコードが200か202かどうかで送信成功を True・False で返すようにしています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import os

import requests
from dotenv import load_dotenv

load_dotenv()
TEAMS_WEBHOOK_URL = os.environ[&quot;TEAMS_WEBHOOK_URL&quot;]


def send_to_teams(message, webhook_url=TEAMS_WEBHOOK_URL) -&gt; bool:
    payload = {
        &quot;type&quot;: &quot;message&quot;,
        &quot;attachments&quot;: [
            {
                &quot;contentType&quot;: &quot;application/vnd.microsoft.card.adaptive&quot;,
                &quot;content&quot;: {
                    &quot;$schema&quot;: &quot;http://adaptivecards.io/schemas/adaptive-card.json&quot;,
                    &quot;type&quot;: &quot;AdaptiveCard&quot;,
                    &quot;version&quot;: &quot;1.4&quot;,
                    &quot;body&quot;: [
                        {&quot;type&quot;: &quot;TextBlock&quot;, &quot;text&quot;: message, &quot;wrap&quot;: True},
                    ],
                },
            }
        ],
    }
    response = requests.post(webhook_url, json=payload)
    return response.status_code in (200, 202)</code></pre></div>



<p class="wp-block-paragraph">やっていることはシンプルで、発行された<strong>Webhook URL</strong>に対して、メッセージを入れたJSONをPOSTするだけです、送るJSONはトップに type として message を置いて、その中の attachments に<strong>Adaptive Card</strong>を入れる、という決まった形になっています、引数のmessageがそのまま<strong>TextBlock</strong>の本文として表示されます</p>



<p class="wp-block-paragraph">送り方のポイントが2つあります、まず<strong>json=</strong>でデータを渡すと、Content-Typeが<strong>application/json</strong>に自動で設定されるので、ヘッダーを手で書く必要はありません、認証についても<strong><span class="swl-marker mark_yellow">Webhook URL自体に署名が含まれている</span></strong>ので、追加の認証ヘッダやトークンは不要です</p>



<div class="wp-block-group is-style-big_icon_point"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">成功したときのステータスコードは<strong><span class="swl-marker mark_yellow" style="color:#e8313b">202(Accepted)</span></strong>です、Chatworkなどは200が返りますが、WorkflowsのWebhookは受け付けてから裏で処理する作りなので、200ではなく202が返ってきます、なので成功判定は200と202のどちらかなら成功、としています</p>
</div></div>



<p class="wp-block-paragraph">あとは <strong>send_to_teams(&#39;通知したいメッセージ&#39;)</strong> のように呼べば、バッチの好きなタイミングで通知できます、処理が終わったタイミングや、例外を捕まえたタイミングで呼ぶと、結果やエラーをそのままTeamsに流せます</p>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph"><strong>TextBlock</strong>の<strong>text</strong>には、太字や斜体、リンクといった一部のmarkdownが使えます、見出しや改行で少し見やすくする程度なら十分です、ただ画像やコードブロックは別の要素を組む形になるので、ここでは1行のテキストを送る範囲にとどめています</p>
</div></div>



<h2 class="wp-block-heading">使うときの注意点</h2>



<p class="wp-block-paragraph">つまずきやすいところを先にまとめておきます</p>



<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>投稿先に選べるのは<strong>標準チャネル</strong>だけ(非公開チャネルやチャットには直接送れない)</li>



<li>旧<strong>Incoming Webhook</strong>は廃止される流れなので、これから作るなら<strong>Workflows</strong>で用意する</li>



<li>成功のステータスコードは<strong>200ではなく202</strong>になることがある</li>



<li>利用には<strong>職場・学校アカウント(Microsoft 365)</strong>が必要(個人アカウントではWorkflowsが使えない)</li>
</ul>



<p class="wp-block-paragraph">旧<strong>Incoming Webhook</strong>(Office 365 コネクタ)は段階的に廃止が進められてきて、公式の最新案内では<strong><span class="swl-marker mark_yellow">2026年5月の更新で最終的な廃止</span></strong>とされています、期限は過去に何度も後ろ倒しされてきた経緯がありますが、これから新しく作るなら使えない前提で考えておくのが安全なので、Workflowsで用意するのが確実です、既存のWebhookがある人も最新の案内を確認しつつ早めに移しておくと安心です</p>



<p class="wp-block-paragraph">権限まわりは環境によります、Power Automateは多くのMicrosoft 365環境で使えますが、組織の設定によってはWorkflowsの作成が制限されていることもあります、テンプレートが選べない、作成でエラーが出るといったときは、組織の管理者に確認してみてください</p>



<div class="wp-block-group is-style-big_icon_caution"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">ループの中で大量に送るような使い方は避けて、処理結果やエラーの要点だけ送るくらいがちょうどいいです、短時間に送りすぎると制限がかかることもあるので、通知は要点をまとめて1回、を意識しておくと安全です</p>
</div></div>



<h2 class="wp-block-heading">公式ドキュメント</h2>



<p class="wp-block-paragraph">もう少し踏み込みたいときは、↓の公式ドキュメントが参考になります、Workflowsからカードを投稿する話や、コネクタ廃止の経緯がまとまっています</p>



<ul class="wp-block-list -list-under-dashed">
<li><a href="https://learn.microsoft.com/ja-jp/power-automate/overview-adaptive-cards" target="_blank" rel="noopener noreferrer">Microsoft Teams にアダプティブ カードを投稿するフローを作成する｜Microsoft Learn</a></li>



<li><a href="https://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/" target="_blank" rel="noopener noreferrer">Retirement of Office 365 connectors within Microsoft Teams｜Microsoft 365 Developer Blog</a></li>
</ul>



<h2 class="wp-block-heading">あとがき</h2>



<p class="wp-block-paragraph">仕事のやり取りがTeams中心なら、処理結果やエラーがそのまま流れてくると見落としがぐっと減ります、Webhookを1つ作ってしまえば、あとはPythonから呼ぶだけなので、一度組んでおくと使い回しが効きます</p>



<p class="wp-block-paragraph">同じ要領でChatworkに通知したい方は、<a href="https://javeo.jp/chatwork-notify/" target="_blank" rel="noopener noreferrer">PythonからChatworkに自動通知する記事</a>もあわせてどうぞ、APIトークンとルームIDの取り方からまとめています、送り先が違うだけで、Pythonから通知する考え方は今回とほぼ同じです</p>



<p class="wp-block-paragraph">Pythonの自動化つながりだと、<a href="https://javeo.jp/python_wait/" target="_blank" rel="noopener noreferrer">Selenium WebDriverWaitの使い方</a>でスクレイピングを安定させて、その結果をこのTeams通知に流す、といった組み合わせも便利です、作ったスクリプトを配りたいときは、<a href="https://javeo.jp/decompile-pyinstaller/" target="_blank" rel="noopener noreferrer">PyInstallerでexe化する話</a>もどうぞ</p>


<div class="p-blogParts post_content" data-partsID="4602">
<div class="jv-books" data-shelf="python"><div class="jv-books-head"><span class="jv-books-title"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4da.png" alt="📚" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Python自動化の独学に効く本</span><span class="jv-books-pr">PR</span></div><div class="jv-books-grid"><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4814401523?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1529/9784814401529_1_2.jpg?_ex=240x240" alt="退屈なことはPythonにやらせよう 第3版" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">退屈なことはPythonにやらせよう 第3版</p><p class="jv-book-author">Al Sweigart</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4814401523?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="python" data-mall="amazon" data-book="4814401523">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18513569%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18513569%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="python" data-mall="rakuten" data-book="4814401523">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4297107384?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/7383/9784297107383.jpg?_ex=240x240" alt="Pythonクローリング&amp;スクレイピング 増補改訂版" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Pythonクローリング&amp;スクレイピング 増補改訂版</p><p class="jv-book-author">加藤耕太</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4297107384?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="python" data-mall="amazon" data-book="4297107384">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F15960670%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F15960670%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="python" data-mall="rakuten" data-book="4297107384">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4839973857?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3858/9784839973858.jpg?_ex=240x240" alt="シゴトがはかどる Python自動処理の教科書" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">シゴトがはかどる Python自動処理の教科書</p><p class="jv-book-author">クジラ飛行机</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4839973857?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="python" data-mall="amazon" data-book="4839973857">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16520665%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16520665%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="python" data-mall="rakuten" data-book="4839973857">楽天で見る</a></div></div></div></div><p class="jv-books-note">私のおすすめからランダムで3冊を表示しています</p></div>
<style>
.jv-books{border:1px solid #e0e0e0;border-radius:8px;padding:16px;margin:1.5em 0;background:#fff}
.jv-books-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.jv-books-title{font-weight:700;font-size:1.05em}
.jv-books-pr{font-size:.7em;color:#888;border:1px solid #ccc;border-radius:3px;padding:1px 6px;flex-shrink:0}
.jv-books-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;min-height:330px}
.jv-book-card{display:flex;flex-direction:column;align-items:center;text-align:center;border:1px solid #f0f0f0;border-radius:6px;padding:12px 8px;background:#fafafa}
.jv-book-cover img{width:auto;max-width:120px;height:170px;object-fit:contain}
.jv-book-info{width:100%;flex:1;display:flex;flex-direction:column}
.jv-book-title{font-size:.82em;font-weight:600;line-height:1.4;margin:8px 0 2px;min-height:2.8em;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.jv-book-author{font-size:.72em;color:#777;margin:0 0 8px}
.jv-book-btns{display:flex;flex-direction:column;gap:6px;width:100%;margin-top:auto}
.jv-btn{display:block;text-align:center;font-size:.78em;font-weight:600;color:#fff!important;text-decoration:none!important;border-radius:4px;padding:7px 4px;line-height:1.2}
.jv-btn-az{background:#e88b00}
.jv-btn-rk{background:#bf0000}
.jv-btn:hover{opacity:.85}
.jv-books-note{font-size:.7em;color:#999;text-align:right;margin:8px 0 0}
@media(max-width:599px){
.jv-books-grid{grid-template-columns:1fr;min-height:0}
.jv-book-card{flex-direction:row;text-align:left;gap:12px}
.jv-book-cover img{height:110px;max-width:80px}
.jv-book-info{min-width:0}
.jv-book-title{min-height:0}
.jv-book-btns{flex-direction:row}
.jv-btn{flex:1}
}
</style>
<script>
(function(){
var SHELF='python';
var all=document.querySelectorAll('.jv-books[data-shelf="'+SHELF+'"]');
var root=null;
for(var k=0;k<all.length;k++){if(!all[k].dataset.jvinit){root=all[k];break;}}
if(!root)return;
root.dataset.jvinit='1';
var POOL=[{"t": "退屈なことはPythonにやらせよう 第3版", "a": "Al Sweigart", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1529/9784814401529_1_2.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4814401523?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18513569%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18513569%2F", "id": "4814401523"}, {"t": "Pythonクローリング&スクレイピング 増補改訂版", "a": "加藤耕太", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/7383/9784297107383.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4297107384?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F15960670%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F15960670%2F", "id": "4297107384"}, {"t": "シゴトがはかどる Python自動処理の教科書", "a": "クジラ飛行机", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3858/9784839973858.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4839973857?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16520665%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16520665%2F", "id": "4839973857"}, {"t": "もっとシゴトがはかどる Python×Excel×AI 業務自動化の教科書", "a": "クジラ飛行机", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8302/9784839988302_1_2.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4839988307?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18238595%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18238595%2F", "id": "4839988307"}, {"t": "Python2年生 スクレイピングのしくみ 第2版", "a": "森巧尚", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/2605/9784798182605.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4798182605?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17821975%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17821975%2F", "id": "4798182605"}, {"t": "今日からできる！ Python業務効率化スキルが身につく本", "a": "いまにゅ", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/7259/9784046057259_1_2.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4046057254?tag=javeo2022-22", "rk": "", "id": "4046057254"}, {"t": "Python自動化簡単レシピ Excel・Word・PDFなどの面倒なデータ処理をサクッと解決", "a": "森巧尚", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/6124/9784798166124_1_2.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/479816612X?tag=javeo2022-22", "rk": "", "id": "479816612X"}];
var REL='nofollow sponsored noopener noreferrer';
function el(tag,cls){var e=document.createElement(tag);if(cls)e.className=cls;return e;}
function btn(href,cls,label,mall,id){
var a=el('a','jv-btn '+cls);a.href=href;a.target='_blank';a.rel=REL;a.textContent=label;
a.setAttribute('data-shelf',SHELF);a.setAttribute('data-mall',mall);a.setAttribute('data-book',id);
return a;}
function card(b){
var d=el('div','jv-book-card');
var cover=el('a','jv-book-cover');cover.href=b.az;cover.target='_blank';cover.rel=REL;
var img=el('img');img.src=b.img;img.alt=b.t;img.width=120;img.height=170;img.loading='lazy';
cover.appendChild(img);
var info=el('div','jv-book-info');
var ttl=el('p','jv-book-title');ttl.textContent=b.t;
var au=el('p','jv-book-author');au.textContent=b.a;
var btns=el('div','jv-book-btns');
btns.appendChild(btn(b.az,'jv-btn-az','Amazonで見る','amazon',b.id));
if(b.rk){btns.appendChild(btn(b.rk,'jv-btn-rk','楽天で見る','rakuten',b.id));}
info.appendChild(ttl);info.appendChild(au);info.appendChild(btns);
d.appendChild(cover);d.appendChild(info);
return d;}
var pool=POOL.slice();
for(var i=pool.length-1;i>0;i--){var j=Math.floor(Math.random()*(i+1));var t=pool[i];pool[i]=pool[j];pool[j]=t;}
var grid=root.querySelector('.jv-books-grid');
grid.style.opacity='0';
while(grid.firstChild)grid.removeChild(grid.firstChild);
pool.slice(0,3).forEach(function(b){grid.appendChild(card(b));});
grid.style.transition='opacity .5s ease';
void grid.offsetWidth;
grid.style.opacity='1';
})();
</script>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/teams-notify/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
