mirror of
https://github.com/andatoshiki/toshiki-notebook.git
synced 2026-06-06 09:16:45 +00:00
41 lines
52 KiB
HTML
41 lines
52 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en-US" dir="ltr">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>Web サービスの作り方 | Toshiki's Note</title>
|
||
<meta name="description" content="Toshiki's web notebook served via Vitepress!">
|
||
<link rel="preload stylesheet" href="/assets/style.f7fa3e44.css" as="style">
|
||
<script type="module" src="/assets/app.011284e6.js"></script>
|
||
<link rel="preload" href="/assets/inter-roman-latin.2ed14f66.woff2" as="font" type="font/woff2" crossorigin="">
|
||
<link rel="modulepreload" href="/assets/chunks/framework.a1bac067.js">
|
||
<link rel="modulepreload" href="/assets/chunks/theme.01bd8d3a.js">
|
||
<link rel="modulepreload" href="/assets/chunks/rest_api.602a6e96.js">
|
||
<link rel="modulepreload" href="/assets/development_aws_webserver.md.e1d73089.lean.js">
|
||
<link rel="stylesheet" href="https://cdnjs.toshiki.dev/ajax/libs/KaTeX/0.16.0/katex.min.css">
|
||
<link rel="stylesheet" href="https://cdnjs.toshiki.dev/ajax/libs/font-awesome/6.3.0/css/all.min.css">
|
||
<link rel="icon" href="/favicon.ico">
|
||
<meta name="author" content="Anda Toshiki">
|
||
<meta name="keywords" content="Toshiki, Anda Toshiki, andatoshiki, GitHub, GitHub action, Vitepress, Vite, Notebook, Knowledge base, Programming, Programming Notes, Academic, Personal, Notebook, Productivity, Journal, Note-taking, Markdown, Notepad, Organization, Tutorial">
|
||
<meta name="google-site-verification" content="lm7PNJiYSPEx1dMast1Xptc0Vk0cU06o-daZSsIgr2I">
|
||
<meta name="HandheldFriendly" content="True">
|
||
<meta name="MobileOptimized" content="320">
|
||
<meta name="theme-color" content="#3c8772">
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:locale" content="en-US">
|
||
<meta property="og:title" content="Toshiki's Note">
|
||
<meta property="og:description" content="Toshiki's web notebook served via Vitepress!">
|
||
<meta property="og:site" content="https://note.toshiki.dev">
|
||
<meta property="og:site_name" content="Toshiki's Note">
|
||
<meta property="og:image" content="https://note.toshiki.dev/og-cover.png">
|
||
<script>function siteruntime(){window.setTimeout("siteruntime()",1e3),X=new Date("8/24/2021 10:28:00"),Y=new Date,T=Y.getTime()-X.getTime(),M=24*60*60*1e3,a=T/M,A=Math.floor(a),b=(a-A)*24,B=Math.floor(b),c=(b-B)*60,C=Math.floor((b-B)*60),D=Math.floor((c-C)*60),siteruntime_span.innerHTML="This site has been running for: "+A+" day(s) "+B+" hour(s) "+C+" minute(s) "+D+" second(s)"}siteruntime();</script>
|
||
<script async="true" defer="true" data-website-id="86de8554-d4c9-4f2b-b62a-068b71241048" src="https://umami.toshiki.dev/umami.js"></script>
|
||
<script id="check-dark-light">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
||
</head>
|
||
<body>
|
||
<div id="app"><div class="Layout" data-v-faab6904><!--[--><!--]--><!--[--><span tabindex="-1" data-v-45af77af></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-45af77af> Skip to content </a><!--]--><!----><header class="VPNav" data-v-faab6904 data-v-247c5ab3><div class="VPNavBar has-sidebar" data-v-247c5ab3 data-v-6d75dbf9><div class="container" data-v-6d75dbf9><div class="title" data-v-6d75dbf9><div class="VPNavBarTitle has-sidebar" data-v-6d75dbf9 data-v-261d630d><a class="title" href="/" data-v-261d630d><!--[--><!--]--><!--[--><img class="VPImage logo" src="/logos/logo.png" alt data-v-38b54517><!--]--><!--[-->Toshiki's Note<!--]--><!--[--><!--]--></a></div></div><div class="content" data-v-6d75dbf9><div class="curtain" data-v-6d75dbf9></div><div class="content-body" data-v-6d75dbf9><!--[--><!--]--><div class="VPNavBarSearch search" style="--vp-meta-key:'Meta';" data-v-6d75dbf9><!--[--><div id="docsearch"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg class="DocSearch-Search-Icon" width="20" height="20" viewBox="0 0 20 20" aria-label="search icon"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6d75dbf9 data-v-3c0c9bf7><span id="main-nav-aria-label" class="visually-hidden" data-v-3c0c9bf7>Main Navigation</span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/development/" tabindex="0" data-v-3c0c9bf7 data-v-873dd2e7 data-v-e4e6c4b9><!--[-->Development<!--]--><!----></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-3c0c9bf7 data-v-0f4f7ee9><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-0f4f7ee9><span class="text" data-v-0f4f7ee9><!----> Academic <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-0f4f7ee9><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-0f4f7ee9><div class="VPMenu" data-v-0f4f7ee9 data-v-de09e9a1><div class="items" data-v-de09e9a1><!--[--><!--[--><div class="VPMenuGroup" data-v-de09e9a1 data-v-c62e6a26><p class="title" data-v-c62e6a26>K-12</p><!--[--><!--[--><div class="VPMenuLink" data-v-c62e6a26 data-v-46fe076b><a class="VPLink link" href="/academic/chemistry/index" data-v-46fe076b data-v-e4e6c4b9><!--[-->Chemistry<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-c62e6a26 data-v-46fe076b><a class="VPLink link" href="/discrete-math/index" data-v-46fe076b data-v-e4e6c4b9><!--[-->Discrete Math.<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-c62e6a26 data-v-46fe076b><a class="VPLink link" href="/academic/literature/index" data-v-46fe076b data-v-e4e6c4b9><!--[-->Literature<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--[--><div class="VPMenuGroup" data-v-de09e9a1 data-v-c62e6a26><p class="title" data-v-c62e6a26>Tools</p><!--[--><!--[--><div class="VPMenuLink" data-v-c62e6a26 data-v-46fe076b><a class="VPLink link" href="/academic/physics/ipho-formulas-jpn/1" data-v-46fe076b data-v-e4e6c4b9><!--[-->Formulas for IPhO JPN.<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><span class="VPLink" data-v-46fe076b data-v-e4e6c4b9><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><span class="VPLink" data-v-46fe076b data-v-e4e6c4b9><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><span class="VPLink" data-v-46fe076b data-v-e4e6c4b9><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><span class="VPLink" data-v-46fe076b data-v-e4e6c4b9><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><span class="VPLink" data-v-46fe076b data-v-e4e6c4b9><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><span class="VPLink" data-v-46fe076b data-v-e4e6c4b9><!--[--><!--]--><!----></span></div><!--]--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><span class="VPLink" data-v-46fe076b data-v-e4e6c4b9><!--[--><!--]--><!----></span></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-3c0c9bf7 data-v-0f4f7ee9><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-0f4f7ee9><span class="text" data-v-0f4f7ee9><!----> Application <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-0f4f7ee9><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-0f4f7ee9><div class="VPMenu" data-v-0f4f7ee9 data-v-de09e9a1><div class="items" data-v-de09e9a1><!--[--><!--[--><div class="VPMenuGroup" data-v-de09e9a1 data-v-c62e6a26><p class="title" data-v-c62e6a26>Personal projects</p><!--[--><!--[--><div class="VPMenuLink" data-v-c62e6a26 data-v-46fe076b><a class="VPLink link" href="/application/markdown-it-katex/how-to-use" data-v-46fe076b data-v-e4e6c4b9><!--[-->markdown-it-katex<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-c62e6a26 data-v-46fe076b><span class="VPLink" data-v-46fe076b data-v-e4e6c4b9><!--[--><!--]--><!----></span></div><!--]--><!--]--></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-3c0c9bf7 data-v-0f4f7ee9><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-0f4f7ee9><span class="text" data-v-0f4f7ee9><!----> Save <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-0f4f7ee9><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-0f4f7ee9><div class="VPMenu" data-v-0f4f7ee9 data-v-de09e9a1><div class="items" data-v-de09e9a1><!--[--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><a class="VPLink link" href="/save/reading/index" data-v-46fe076b data-v-e4e6c4b9><!--[-->Reading<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-de09e9a1 data-v-46fe076b><a class="VPLink link" href="/academic/vocabulary/index" data-v-46fe076b data-v-e4e6c4b9><!--[-->Vocabulary<!--]--><!----></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-6d75dbf9 data-v-a2970734><label title="toggle dark mode" data-v-a2970734 data-v-8702c5d1><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" aria-checked="false" data-v-8702c5d1 data-v-ec70faa1><span class="check" data-v-ec70faa1><span class="icon" data-v-ec70faa1><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-8702c5d1><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-8702c5d1><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></label></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6d75dbf9 data-v-c2426d78 data-v-1bba9d3c><!--[--><a class="VPSocialLink" href="https://github.com/andatoshiki" aria-label="github" target="_blank" rel="noopener" data-v-1bba9d3c data-v-cf0cf26e><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><a class="VPSocialLink" href="https://twitter.com/andatoshiki" aria-label="twitter" target="_blank" rel="noopener" data-v-1bba9d3c data-v-cf0cf26e><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Twitter</title><path d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"/></svg></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6d75dbf9 data-v-e42ba61f data-v-0f4f7ee9><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-0f4f7ee9><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="icon" data-v-0f4f7ee9><circle cx="12" cy="12" r="2"></circle><circle cx="19" cy="12" r="2"></circle><circle cx="5" cy="12" r="2"></circle></svg></button><div class="menu" data-v-0f4f7ee9><div class="VPMenu" data-v-0f4f7ee9 data-v-de09e9a1><!----><!--[--><!--[--><!----><div class="group" data-v-e42ba61f><div class="item appearance" data-v-e42ba61f><p class="label" data-v-e42ba61f>Appearance</p><div class="appearance-action" data-v-e42ba61f><label title="toggle dark mode" data-v-e42ba61f data-v-8702c5d1><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" aria-checked="false" data-v-8702c5d1 data-v-ec70faa1><span class="check" data-v-ec70faa1><span class="icon" data-v-ec70faa1><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-8702c5d1><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-8702c5d1><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></label></div></div></div><div class="group" data-v-e42ba61f><div class="item social-links" data-v-e42ba61f><div class="VPSocialLinks social-links-list" data-v-e42ba61f data-v-1bba9d3c><!--[--><a class="VPSocialLink" href="https://github.com/andatoshiki" aria-label="github" target="_blank" rel="noopener" data-v-1bba9d3c data-v-cf0cf26e><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><a class="VPSocialLink" href="https://twitter.com/andatoshiki" aria-label="twitter" target="_blank" rel="noopener" data-v-1bba9d3c data-v-cf0cf26e><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Twitter</title><path d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"/></svg></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6d75dbf9 data-v-a9101582><span class="container" data-v-a9101582><span class="top" data-v-a9101582></span><span class="middle" data-v-a9101582></span><span class="bottom" data-v-a9101582></span></span></button></div></div></div></div><!----></header><div class="VPLocalNav" data-v-faab6904 data-v-ca8eb0ef><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-ca8eb0ef><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="menu-icon" data-v-ca8eb0ef><path d="M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"></path><path d="M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"></path><path d="M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"></path><path d="M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"></path></svg><span class="menu-text" data-v-ca8eb0ef>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-ca8eb0ef data-v-d78c832a><button data-v-d78c832a>Return to top</button><!----></div></div><aside class="VPSidebar" data-v-faab6904 data-v-bdc7efdf><div class="curtain" data-v-bdc7efdf></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-bdc7efdf><span class="visually-hidden" id="sidebar-aria-label" data-v-bdc7efdf> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="group" data-v-bdc7efdf><section class="VPSidebarItem level-0 collapsible" data-v-bdc7efdf data-v-3d2999a2><div class="item" role="button" tabindex="0" data-v-3d2999a2><div class="indicator" data-v-3d2999a2></div><h2 class="text" data-v-3d2999a2>Wiki Database</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-3d2999a2><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-3d2999a2><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-3d2999a2><!--[--><div class="VPSidebarItem level-1" data-v-3d2999a2 data-v-3d2999a2><!----><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-faab6904 data-v-abf3a598><div class="VPDoc has-sidebar has-aside" data-v-abf3a598 data-v-070d2e51><!--[--><!--]--><div class="container" data-v-070d2e51><div class="aside" data-v-070d2e51><div class="aside-curtain" data-v-070d2e51></div><div class="aside-container" data-v-070d2e51><div class="aside-content" data-v-070d2e51><div class="VPDocAside" data-v-070d2e51 data-v-fae949d7><!--[--><!--]--><!--[--><!--]--><div class="VPDocAsideOutline" data-v-fae949d7 data-v-b2195150><div class="content" data-v-b2195150><div class="outline-marker" data-v-b2195150></div><div class="outline-title" data-v-b2195150>TOC</div><nav aria-labelledby="doc-outline-aria-label" data-v-b2195150><span class="visually-hidden" id="doc-outline-aria-label" data-v-b2195150> Table of Contents for current page </span><ul class="root" data-v-b2195150 data-v-d577eff3><!--[--><!--]--></ul></nav></div></div><!--[--><!--]--><div class="spacer" data-v-fae949d7></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--[--><!--[--><!--[--><div class="VPDocAsideSponsors"><div class="VPSponsors vp-sponsor aside"><!--[--><section class="vp-sponsor-section"><!----><div class="VPSponsorsGrid vp-sponsor-grid medium"><!--[--><div class="vp-sponsor-grid-item"><a class="vp-sponsor-grid-link" target="_blank" rel="sponsored noopener"><article class="vp-sponsor-grid-box"><h4 class="visually-hidden"></h4><img class="vp-sponsor-grid-image" src="https://jsd.toshiki.dev/gh/andatoshiki/toshiki-notebook@master/assets/logo/sponsor/telegram.png"></article></a></div><!--]--></div></section><!--]--></div></div><!--]--><!--]--><!--]--><!--]--></div></div></div></div><div class="content" data-v-070d2e51><div class="content-container" data-v-070d2e51><!--[--><!--]--><!----><main class="main" data-v-070d2e51><div style="position:relative;" class="vp-doc _development_aws_webserver" data-v-070d2e51><div><h1 id="web-サービスの作り方" tabindex="-1">Web サービスの作り方 <a class="header-anchor" href="#web-サービスの作り方" aria-label="Permalink to "Web サービスの作り方""></a></h1><p>ここからが,本書第三部の内容になる. これまでのセクションでは,仮想サーバーをクラウド上に起動し,そこで計算を走らせる方法について解説をしてきた. EC2, ECS, Fargate, Batch などを利用して,動的にスケールするクラスターを構成し,並列にタスクを実行するクラウドシステムを実装してきた. 振り返ると,これまで紹介してきた内容は,<strong>自分自身が行いたい計算をクラウドを駆使することで実現する</strong>,という用途にフォーカスしていたことに気がつくだろう. 一方で,<strong>広く一般の人々に使ってもらえるような計算サービス・データベース</strong>を提供する,というのもクラウドの重要な役割として挙げられる.</p><p>本章から始まる第三部では,前回までとは少し方向性を変え,どのようにしてクラウド上にアプリケーションを展開し,広く一般の人に使ってもらうか,という点を講義したいと思う. これを通じて,どのようにして世の中のウェブサービスができ上がっているのかを知り,さらにどうやって自分でそのようなアプリケーションをゼロから構築するのか,という点を学んでもらう. その過程で,サーバーレスアーキテクチャという最新のクラウド設計手法を解説する.</p><p>その前準備として,本章ではどのようにしてウェブサービスが出来上がっているのか,その背後にある技術の概要を解説する. 用語の解説が中心となるが,後のハンズオンを実装するために必須の知識であるので,理解して前に進むよう心がけよう.</p><h2 id="ウェブサービスの仕組み-—-twitter-を例に" tabindex="-1">ウェブサービスの仕組み — Twitter を例に <a class="header-anchor" href="#ウェブサービスの仕組み-—-twitter-を例に" aria-label="Permalink to "ウェブサービスの仕組み — Twitter を例に""></a></h2><p>あなたがパソコンやスマートフォンから Twitter, Facebook, YouTube などのウェブサービスにアクセスしたとき,実際にどのようなことが行われ,コンテンツが提示されているのだろうか?</p><p>HTTP を通じたサーバーとクライアントのデータのやり取りは,すでに知っている読者も多いだろうし,逆にすべて解説しようとすると紙面が足りないので,ここではエッセンスの説明のみにとどめる. 以降では <a href="https://twitter.com" target="_blank" rel="noreferrer">Twitter</a> を具体例として,背後にあるサーバーとクライアントの間の通信を概説しよう. 概念図としては <a href="#fig:web_server">figure_title</a> のような通信がクライアントとサーバーの間で行われていることになる.</p><p><img src="/assets/web_server.0e6ecafa.png" alt="クライアントと Web サーバーの通信の概念図"></p><p>前提として,クライアントとサーバーの通信は <strong>HTTP (Hypertext Transfer Protocol)</strong> を使って行われる. また,最近では,暗号化された HTTP である <strong>HTTPS (HTTPS (Hypertext Transfer Protocol Secure))</strong> を用いることがスタンダードになってきている. 第一のステップとして,クライアントは HTTP(S) 通信によってサーバーから静的なコンテンツを取得する. 静的なコンテンツとは, <strong>HTML (Hyptertext Markup Language)</strong> で記述されたウェブページの文書本体, <strong>CSS (Cascading Style Sheets)</strong> で記述されたページのデザインやレイアウトファイル,そして <strong>JavaScript (JS)</strong> で記述されたページの動的な挙動を定義したプログラム,が含まれる. Twitter を含む現代的なウェブアプリケーションの設計では,この静的なファイル群はページの”枠”を定義するだけで,中身となるコンテンツ (例: ツイートの一覧) は別途 <strong>API (Application Programming Interface)</strong> によって取得されなければならない. そこで,クライアントは先のステップで取得された JavaScript で定義されたプログラムに従って,サーバーに API を送信し,ツイートや画像データを取得する. この際,テキストデータのやり取りには <strong>JSON (JavaScript Object Notation)</strong> というフォーマットが用いられることが多い. 画像や動画などのコンテンツも同様に API により取得される. このようにして取得されたテキストや画像が,HTML の文書に埋め込まれることで,最終的にユーザーに提示されるページが完成するのである. また,新しいツイートを投稿するときにも,クライアントから API を通じてサーバーのデータベースにデータが書き込まれる.</p><h2 id="rest-api" tabindex="-1">REST API <a class="header-anchor" href="#rest-api" aria-label="Permalink to "REST API""></a></h2><p>API (Application Programming Interface) とはこれまで何度も出てきた言葉であるが,ここではよりフォーマルな定義付けを行う. API とはあるソフトウェア・アプリケーションが,外部のソフトウェアに対してコマンドやデータをやり取りするための媒介の一般的総称である. とくに,ウェブサービスの文脈では,サーバーが外界に対して提示しているコマンドの一覧のことを意味する. クライアントは,提示されている API から適切なコマンドを使うことによって,所望のデータを取得したり,あるいはサーバーにデータを送信したりする.</p><p>とくに,ウェブの文脈では <strong>REST (Representational State Transfer)</strong> とよばれる設計思想に基づいた API が現在では最も一般的に使われている. REST の設計指針に従った API のことを <strong>REST API</strong> あるいは <strong>RESTful API</strong> とよんだりする.</p><p>REST API は, <a href="#rest_api">figure_title</a> に示したような <strong>Method</strong> と <strong>URI (Universal Resource Identifier)</strong> の組からなる.</p><p><img src="/assets/rest_api.1958bd17.png" alt="REST API"></p><p>Method (メソッド) とは,どのような操作を行いたいかを抽象的に表す,<strong>"動詞"</strong> として捉えることができる. メソッドには HTTP 規格で定義された 9 個の動詞 (verb) を使用することができる. この中でも, <code>GET</code>, <code>POST</code>, <code>PUT</code>, <code>PATCH</code>, <code>DELETE</code> の 5 個が最も頻繁に使用される (<a href="#tab:rest_api_methods">table_title</a>). この 5 つのメソッドによる操作を総称して <strong>CRUD</strong> (create, read, update, and delete) とよぶ.</p><table><caption>REST API Methods</caption><colgroup><col style="width:25%;"><col style="width:75%;"></colgroup><thead><tr class="header"><th>メソッド</th><th>意図される動作</th></tr></thead><tbody><tr class="odd"><td><p>GET</p></td><td><p>要素を取得する</p></td></tr><tr class="even"><td><p>POST</p></td><td><p>新しい要素を作成する</p></td></tr><tr class="odd"><td><p>PUT</p></td><td><p>既存の要素を新しい要素と置き換える</p></td></tr><tr class="even"><td><p>PATCH</p></td><td><p>既存の要素の一部を更新する</p></td></tr><tr class="odd"><td><p>DELETE</p></td><td><p>要素を削除する</p></td></tr></tbody></table><p>一方, URI は操作が行われる対象,すなわち <strong>"目的語"</strong> を表す. ウェブの文脈では操作が行われる対象のことをしばしば <strong>リソース</strong> とよぶ. URI は多くの場合 http または https から始まるウェブサーバーのアドレスから始まり, / (スラッシュ) 以降に所望のリソースのパスが指定される. <a href="#rest_api">figure_title</a> の例で言えば, <code>https://api.twitter.com</code> というアドレスの <code>/1.1/status/home_timeline</code> というリソースを取得 (GET) せよ,という意味になる (なお,ここで <code>1.1</code> という数字は API のバージョンを示している). この API リクエストによって,ユーザーのホームのタイムラインのツイートの一覧が取得される.</p><p>REST API のメソッドには, <a href="#tab:rest_api_methods">table_title</a> で挙げたもの以外に, HTTP プロトコルで定義されているほかのメソッド (OPTIONS, TRACE など) を用いることもできるが,あまり一般的ではない.</p><p>また,これらのメソッドだけでは動詞として表現しきれないこともあるが, URI の名前でより意味を明確にすることもある. メソッドの使い方も,要素を削除する際は必ず <code>DELETE</code> を使わなければならない,という決まりもなく,たとえば, Twitter API でツイートを消す API は <code>POST statuses/destroy/:id</code> で定義されている. 最終的には,各ウェブサービスが公開している API ドキュメンテーションを読んで,それぞれの API がどんな操作をするのかを調べる必要がある.</p><p>REST の概念は 2000 年代初頭に確立され,今日の API 設計のスタンダードとなった. 一方で,ウェブのテクノロジーが進歩するにつれて,新たな API の設計アプローチの需要も高まっている. 近年とくに人気を集めているのが, <a href="https://graphql.org/" target="_blank" rel="noreferrer">GraphQL</a> と呼ばれる API の設計方法である. GraphQL は Facebook 社によって最初に作られ,現在は GraghQL Foundation によって維持と更新がされている. GraphQL を使用すると,クライアントは REST と比較してより柔軟性の高いデータのクエリを行うことができるなど,いくつかの利点がある. キーワードだけでも知っておくと,今後役に立つだろう.</p><h2 id="twitter-api" tabindex="-1">Twitter API <a class="header-anchor" href="#twitter-api" aria-label="Permalink to "Twitter API""></a></h2><p>もう少し具体的にウェブサービスの API を体験する目的で,ここでは Twitter の API を見てみよう. Twitter が提供している API の一覧は <a href="https://developer.twitter.com/en/docs/api-reference-index" target="_blank" rel="noreferrer">Twitter の Developer Documentation</a> で見ることができる. いくつかの代表的な API を <a href="#tab_twitter_api">table_title</a> にまとめた.</p><table><caption>Twitter API</caption><colgroup><col style="width:50%;"><col style="width:50%;"></colgroup><thead><tr class="header"><th>エンドポイント</th><th>動作</th></tr></thead><tbody><tr class="odd"><td><p><code>GET statuses/home_timeline</code></p></td><td><p>ホームのタイムラインのツイートの一覧を取得する.</p></td></tr><tr class="even"><td><p><code>GET statuses/show/:id</code></p></td><td><p><code>:id</code> で指定されたツイートの詳細情報を取得する.</p></td></tr><tr class="odd"><td><p><code>GET search</code></p></td><td><p>ツイートの検索を実行する.</p></td></tr><tr class="even"><td><p><code>POST statuses/update</code></p></td><td><p>新しいツイートを投稿する.</p></td></tr><tr class="odd"><td><p><code>POST media/upload</code></p></td><td><p>画像をアップロードする</p></td></tr><tr class="even"><td><p><code>POST statuses/destroy/:id</code></p></td><td><p><code>:id</code> で指定されたツイートを削除する.</p></td></tr><tr class="odd"><td><p><code>POST statuses/retweet/:id</code></p></td><td><p><code>:id</code> で指定されたツイートをリツイートする.</p></td></tr><tr class="even"><td><p><code>POST statuses/unretweet/:id</code></p></td><td><p><code>:id</code> で指定されたツイートのリツイートを取り消す.</p></td></tr><tr class="odd"><td><p><code>POST favorites/create</code></p></td><td><p>選択したツイートを"いいね"する.</p></td></tr><tr class="even"><td><p><code>POST favorites/destroy</code></p></td><td><p>選択したツイートを"いいね"を取り消す.</p></td></tr></tbody></table><p>この API リストをもとに, Twitter のアプリまたはウェブサイトを開いたときに起こるクライアントとサーバーの通信をシミュレートしてみよう.</p><p>ユーザーが Twitter を開くと,まず最初に <code>GET statuses/home_timeline</code> の API リクエストによって,ユーザーのホームのタイムラインのツイートのリストが取得される. 個々のツイートは JSON 形式のデータになっており, <code>id</code>, <code>text</code>, <code>user</code>, <code>coordinates</code>, <code>entities</code> などの属性を含む. <code>id</code> はツイートに固有な ID を表し, <code>text</code> はツイートの本文を含んでいる. <code>user</code> はツイートを投稿したユーザーの名前やプロフィール画像の URL などを含んだ JSON データになっている. <code>coordinates</code> にはツイートが発信された地理的な座標が記録されている. また, <code>entities</code> にはツイートに関連するメディアファイル (画像など) のリンクなどの情報が埋め込まれている. <code>GET statuses/home_timeline</code> からは直近のツイートのリスト (リストが長すぎる場合は途中で切られたもの) が取得される. もしツイートの ID を知っている場合は <code>GET statuses/show/:id</code> を呼ぶことによって, <code>:id</code> パラメータで指定された特定のツイートを取得することができる.</p><p>ツイートの検索を行うためには <code>GET search</code> API を使用する. この API には,ツイートに含まれる単語や,ハッシュタグ,ツイートの発信された日時や場所など,様々なクエリの条件を渡すことができる. API からは, <code>GET statuses/home_timeline</code> などと同様, JSON 形式のツイートのデータが返される.</p><p>ユーザーが新しいツイートを投稿するには <code>POST statuses/update</code> のエンドポイントを利用する. <code>POST statuses/update</code> には,ツイートの文章や,リプライの場合はリプライ先のツイートの ID などのデータを送信する. また,ツイートに画像データを添付したい場合は, <code>POST media/upload</code> を併せて使用する. ツイートの削除を行うには, <code>POST statuses/destroy/:id</code> を用いる.</p><p>そのほか,頻繁に行われる操作としては, <code>POST statuses/retweet/:id</code> と <code>POST statuses/unretweet/:id</code> がある. これらは, <code>:id</code> で指定されるツイートに対して,それぞれリツイートを実行あるいは取り消すための API である. また, <code>POST favorites/create</code>,<code>POST favorites/destroy</code> を使用することによって,選択されたツイートに"いいね"を追加したり,取り消したりする操作を行う.</p><p>このような一連の操作が, Twitter のアプリの背後では行われている. また,自分自身でボットを作成したい場合は,これらの API を適切に組み合わせ,カスタムのプログラムを書くことで実現される.</p><p>このように, API はあらゆるウェブサービスを作るうえで一番基礎となる要素である. 次からの章では本章で紹介した用語が何度も出てくるので,頭の片隅に置いたうえで読み進めていただきたい.</p></div></div></main><footer class="VPDocFooter" data-v-070d2e51 data-v-12247960><!--[--><!--[--><!--[--><!--[--><!----><!--]--><!--]--><!--]--><!--]--><div class="edit-info" data-v-12247960><div class="edit-link" data-v-12247960><a class="VPLink link edit-link-button" href="https://github.com/andatoshiki/toshiki-notebook/edit/master/docs/development/aws/webserver.md" target="_blank" rel="noreferrer" data-v-12247960 data-v-e4e6c4b9><!--[--><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" class="edit-link-icon" aria-label="edit icon" data-v-12247960><path d="M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"></path><path d="M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"></path></svg> Edit this page on GitHub<!--]--><!----></a></div><div class="last-updated" data-v-12247960><p class="VPLastUpdated" data-v-12247960 data-v-3b3294f7>Last updated: <time datetime="2023-05-24T05:37:13.000Z" data-v-3b3294f7></time></p></div></div><!----></footer><!--[--><!--[--><!--[--><div id="comment-container"></div><!--]--><!--]--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-faab6904 data-v-498c4241><div class="container" data-v-498c4241><p class="message" data-v-498c4241>Wrote with <i class="heart fa fa-heart fa-xs fa-beat"></i> and <i class="coffee fa fa-coffee fa-xs" aria-hidden="true"></i> by <a href="https://toshiki.dev">Anda Toshiki</a> at <code>root@andatoshiki:/~</code></p><p class="copyright" data-v-498c4241>Copyright © 2023-2023 <a href="https://github.com/andatoshiki">Anda Toshiki</a>, <a href="https://github.com/lolilab">LoliLab</a> and <a href="https://github.com/toshikidev">Toshiki Dev</a> present <br /><span id="siteruntime_span"></span></p></div></footer><!--[--><!--]--></div></div>
|
||
<script>__VP_HASH_MAP__ = JSON.parse("{\"academic_chemistry_index.md\":\"449fa589\",\"academic_chemistry_problems_03-02-1.md\":\"c131079d\",\"academic_literature_index.md\":\"10370ce1\",\"academic_chemistry_problems_03-02-2.md\":\"c0047dc1\",\"academic_chemistry_problems_02-20.md\":\"f7198365\",\"academic_chemistry_problems_03-02-3.md\":\"19aabddb\",\"academic_physics_index.md\":\"ee295450\",\"academic_chemistry_notes_12-5.md\":\"d22d0b02\",\"academic_physics_ipho-formulas-jpn_6.md\":\"99ca0a9a\",\"academic_literature_writing_methods-of-development.md\":\"05a410d3\",\"academic_physics_ipho-formulas-jpn_5.md\":\"9bd64e74\",\"development_aws_main.md\":\"89e80b52\",\"academic_physics_ipho-formulas-jpn_1.md\":\"9b188f24\",\"academic_physics_ipho-formulas-jpn_10.md\":\"88c3da4f\",\"academic_physics_ipho-formulas-jpn_11.md\":\"8230d11b\",\"academic_physics_ipho-formulas-jpn_12.md\":\"804eb05e\",\"getting-started.md\":\"5e7510d8\",\"academic_physics_ipho-formulas-jpn_13.md\":\"df8b865f\",\"academic_physics_ipho-formulas-jpn_2.md\":\"7f4688a5\",\"academic_physics_ipho-formulas-jpn_3.md\":\"81c6a03e\",\"academic_physics_ipho-formulas-jpn_4.md\":\"e6b35648\",\"academic_physics_ipho-formulas-jpn_8.md\":\"ff695ec4\",\"academic_physics_ipho-formulas-jpn_9.md\":\"c008d479\",\"academic_vocabulary_2023_02_2023-02-27.md\":\"9251abc6\",\"academic_vocabulary_index.md\":\"ef9fd8b9\",\"application_markdown-it-katex_how-to-use.md\":\"c2e38a13\",\"application_markdown-it-katex_tips.md\":\"e8ea020b\",\"development_aws_readme.md\":\"e5b996b3\",\"development_aws_acknowledgement.md\":\"cbbcf3ba\",\"development_aws_appendix.md\":\"0dac2cb9\",\"development_aws_assignments.md\":\"d88aa138\",\"development_aws_author.md\":\"48665249\",\"development_aws_aws-batch.md\":\"5da6b399\",\"development_aws_aws-get-started.md\":\"1c6f82e9\",\"development_aws_closing.md\":\"2981541f\",\"development_aws_cloud.md\":\"52a3bf72\",\"development_aws_docker-system.md\":\"2f29a282\",\"development_aws_handson-bashoutter.md\":\"b4f82ab1\",\"development_aws_handson-jupyter.md\":\"f86f40fa\",\"development_aws_handson-qabot.md\":\"eae8416c\",\"development_aws_handson-serverless.md\":\"5988a9db\",\"development_aws_introduction.md\":\"65e9a8ec\",\"development_aws_license.md\":\"bfcbe73b\",\"development_aws_scientific-computing.md\":\"7e4893b0\",\"academic_physics_ipho-formulas-jpn_7.md\":\"f0a8a1d7\",\"development_aws_serverless.md\":\"10e6a820\",\"development_aws_webserver.md\":\"e1d73089\",\"development_file-naming-convention.md\":\"5b555b8e\",\"roadmap.md\":\"c25b8ac7\",\"development_rclone-for-r2.md\":\"f9bf8b14\",\"index.md\":\"150c8fac\",\"javascript_notes_1_1-1.md\":\"dc1e40e2\",\"javascript_notes_1_1-2.md\":\"2a4cf747\",\"save_reading_index.md\":\"9db5faad\",\"save_reading_outliers_1.md\":\"b317c15a\",\"save_reading_outliers_2.md\":\"9ead3a8f\",\"save_reading_outliers_3.md\":\"d5955073\",\"save_reading_outliers_4.md\":\"7f3fc5d3\",\"development_aws_handson-ec2.md\":\"89704a19\",\"application_markdown-it-katex_support-function.md\":\"9a953336\",\"application_markdown-it-katex_support-table.md\":\"d6f10747\"}")
|
||
__VP_SITE_DATA__ = JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Toshiki's Note\",\"description\":\"Toshiki's web notebook served via Vitepress!\",\"base\":\"/\",\"head\":[],\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"Development\",\"link\":\"/development/\"},{\"text\":\"Academic\",\"items\":[{\"text\":\"K-12\",\"items\":[{\"text\":\"Chemistry\",\"link\":\"/academic/chemistry/index\",\"activeMatch\":\"/academic/chemistry/\"},{\"text\":\"Discrete Math.\",\"link\":\"/discrete-math/index\",\"activeMatch\":\"/categories/fragments/\"},{\"text\":\"Literature\",\"link\":\"/academic/literature/index\",\"activeMatch\":\"/academic/literature/\"}]},{\"text\":\"Tools\",\"items\":[{\"text\":\"Formulas for IPhO JPN.\",\"link\":\"/academic/physics/ipho-formulas-jpn/1\",\"activeMatch\":\"/academic/physics/ipho-formulas-jpn/\"}]},{\"text\":\"\",\"link\":\"\",\"activeMatch\":\"\"},{\"text\":\"\",\"link\":\"\",\"activeMatch\":\"\"},{\"text\":\"\",\"link\":\"\",\"activeMatch\":\"\"},{\"text\":\"\",\"link\":\"\",\"activeMatch\":\"\"},{\"text\":\"\",\"link\":\"\",\"activeMatch\":\"\"},{\"text\":\"\",\"link\":\"\",\"activeMatch\":\"\"},{\"text\":\"\",\"link\":\"\",\"activeMatch\":\"\"}],\"activeMatch\":\"/academic/\"},{\"text\":\"Application\",\"items\":[{\"text\":\"Personal projects\",\"items\":[{\"text\":\"markdown-it-katex\",\"link\":\"/application/markdown-it-katex/how-to-use\",\"activeMatch\":\"/application/markdown-it-katex/\"},{\"text\":\"\",\"link\":\"\",\"activeMatch\":\"\"}]}],\"activeMatch\":\"/save/\"},{\"text\":\"Save\",\"items\":[{\"text\":\"Reading\",\"link\":\"/save/reading/index\",\"activeMatch\":\"/save/reading/\"},{\"text\":\"Vocabulary\",\"link\":\"/academic/vocabulary/index\",\"activeMatch\":\"/academic/vocabulary/\"}],\"activeMatch\":\"/save/\"}],\"sidebar\":{\"/development/\":[{\"text\":\"Wiki Database\",\"collapsed\":false,\"items\":[{\"text\":\"\",\"link\":\"\"}]}],\"/academic/chemistry/\":[{\"text\":\"Textbook\",\"collapsed\":true,\"items\":[{\"text\":\"12-5: Reaction Mechanism\",\"link\":\"/academic/chemistry/notes/12-5\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"}]},{\"text\":\"Kinetics\",\"collapsed\":false,\"items\":[{\"text\":\"Rate determining steps\",\"link\":\"/academic/chemistry/notes/kinetics/rate-determining-step\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"}]},{\"text\":\"Problems & Solutions\",\"collapsed\":true,\"items\":[{\"text\":\"Problem: 02-20\",\"link\":\"/academic/chemistry/problems/02-20\"},{\"text\":\"Problem: 03-02-1\",\"link\":\"/academic/chemistry/problems/03-02-1\"},{\"text\":\"Problem: 03-02-2\",\"link\":\"/academic/chemistry/problems/03-02-2\"},{\"text\":\"Problem: 03-02-3\",\"link\":\"/academic/chemistry/problems/03-02-3\"}]}],\"/academic/physics\":[{\"text\":\"IPhO Formulas: JP Ver.\",\"collapsed\":false,\"items\":[{\"text\":\"1: 数学\",\"link\":\"/academic/physics/ipho-formulas-jpn/1\"},{\"text\":\"2: 一般的な推奨事\",\"link\":\"/academic/physics/ipho-formulas-jpn/2\"},{\"text\":\"3: 運動学\",\"link\":\"/academic/physics/ipho-formulas-jpn/3\"},{\"text\":\"4: 力学\",\"link\":\"/academic/physics/ipho-formulas-jpn/4\"},{\"text\":\"5: 振動と波\",\"link\":\"/academic/physics/ipho-formulas-jpn/5\"},{\"text\":\"6: 幾何光学,測光\",\"link\":\"/academic/physics/ipho-formulas-jpn/6\"},{\"text\":\"7: 波動光学\",\"link\":\"/academic/physics/ipho-formulas-jpn/7\"},{\"text\":\"8: 電気回路\",\"link\":\"/academic/physics/ipho-formulas-jpn/8\"},{\"text\":\"9: 電磁気学\",\"link\":\"/academic/physics/ipho-formulas-jpn/9\"},{\"text\":\"10: 熱力\",\"link\":\"/academic/physics/ipho-formulas-jpn/10\"},{\"text\":\"11: 量子力学\",\"link\":\"/academic/physics/ipho-formulas-jpn/11\"},{\"text\":\"12: Keplerの法則\",\"link\":\"/academic/physics/ipho-formulas-jpn/12\"},{\"text\":\"13: 相対性理論\",\"link\":\"/academic/physics/ipho-formulas-jpn/13\"}]}],\"/academic/vocabulary/\":[{\"text\":\"Vocabulary\",\"collapsed\":true,\"items\":[{\"text\":\"2023-02-27\",\"link\":\"/academic/vocabulary/2023/02/2023-02-27\"}]}],\"/academic/literature/\":[{\"text\":\"Writing Resources\",\"collapsed\":true,\"items\":[{\"text\":\"Patterns of Organization and Methods of Development\",\"link\":\"/academic/literature/writing/methods-of-development\"}]}],\"/javascript/\":[{\"text\":\"1: Basic JavaScript-Value, Variables, and Control Flow\",\"collapsed\":true,\"items\":[{\"text\":\"1-1: Numbers\",\"link\":\"/javascript/notes/1/1-1\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"},{\"text\":\"\",\"link\":\"\"}]}],\"/save/reading/\":[{\"text\":\"Outliers\",\"collapsed\":true,\"items\":[{\"text\":\"Introduction & Chapter 1: The Roseto Mystery\",\"link\":\"/save/reading/outliers/1\"},{\"text\":\"Chapter 2: The 10,000-Hour Rule\",\"link\":\"/save/reading/outliers/2\"},{\"text\":\"Chapter 3: The Trouble with Geniuses, Part 1\",\"link\":\"/save/reading/outliers/3\"},{\"text\":\"Chapter 4: The Trouble with Geniuses, Part 2\",\"link\":\"/save/reading/outliers/4\"}]}],\"/application/\":[{\"text\":\"markdown-it-katex\",\"collapsed\":false,\"items\":[{\"text\":\"1: How to use?\",\"link\":\"/application/markdown-it-katex/how-to-use\"},{\"text\":\"2: KaTeX supported functions\",\"link\":\"/application/markdown-it-katex/support-function\"},{\"text\":\"3: KaTeX support tables\",\"link\":\"/application/markdown-it-katex/support-table\"},{\"text\":\"4: Tips\",\"link\":\"/application/markdown-it-katex/tips\"}]}]},\"footer\":{\"copyright\":\"Copyright © 2023-2023 <a href=\\\"https://github.com/andatoshiki\\\">Anda Toshiki</a>, <a href=\\\"https://github.com/lolilab\\\">LoliLab</a> and <a href=\\\"https://github.com/toshikidev\\\">Toshiki Dev</a> present <br /><span id=\\\"siteruntime_span\\\"></span>\",\"message\":\"Wrote with <i class=\\\"heart fa fa-heart fa-xs fa-beat\\\"></i> and <i class=\\\"coffee fa fa-coffee fa-xs\\\" aria-hidden=\\\"true\\\"></i> by <a href=\\\"https://toshiki.dev\\\">Anda Toshiki</a> at <code>root@andatoshiki:/~</code>\"},\"logo\":\"/logos/logo.png\",\"outline\":\"deep\",\"outlineTitle\":\"TOC\",\"outlineBadges\":false,\"lastUpdatedText\":\"Last updated\",\"algolia\":{\"appId\":\"G9IUR45K98\",\"apiKey\":\"8528cc91281d8112b28f508317a96dd3\",\"indexName\":\"toshiki-notebook\"},\"editLink\":{\"pattern\":\"https://github.com/andatoshiki/toshiki-notebook/edit/master/docs/:path\",\"text\":\"Edit this page on GitHub\"},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/andatoshiki\"},{\"icon\":\"twitter\",\"link\":\"https://twitter.com/andatoshiki\"}]},\"locales\":{\"/\":{\"label\":\"English\",\"lang\":\"en-US\"},\"/jp/\":{\"label\":\"Japanese\",\"title\":\"Vue Test Utils\",\"lang\":\"jp-JP\",\"description\":\"La documentation officielle de Vue Test Utils\"}},\"scrollOffset\":90,\"cleanUrls\":true}")</script>
|
||
|
||
</body>
|
||
</html> |