【GitHub】基本操作
前提
GitHub Desktopを使用
ローカルブランチ作成

コミット

ブランチの切り替え

プッシュ(ローカル⇒リモート)
ローカルブランチの内容をリモートブランチへ反映する際に行う

プル(リモート⇒ローカル)
リモートブランチの内容をローカルブランチに反映する際に行う

マージ
1.マージ先のブランチに切り替える
2.マージを選択

3.マージ元のブランチを選ぶ

4.プッシュ
リモートブランチを更新するにはプッシュを行うこと
ブランチ削除

【LINE、GoogleAppsScript】LINEにメッセージを送る
- 1.アカウント作成
- 2.Messaging API チャネルの作成
- 3.アクセストークンの取得
- 4.Google Apps Scriptの作成(LINEユーザーIDの取得スクリプト)
- 5.Webhook URLを設定
- 6.BotアカウントとLINEで会話し、ユーザーIDを取得する
- 7.LINE通知スクリプトの作成
1.アカウント作成
1-1.LINE Official Account Managerアカウントを作成
1-2.通知用LINEアカウントを作成
※ログインするときはビジネスのほう

1-3.Line Developersアカウントの作成
2.Messaging API チャネルの作成
2-1.プロバイダーの作成

3.アクセストークンの取得

4.Google Apps Scriptの作成(LINEユーザーIDの取得スクリプト)
4-1.Google Apps Scriptを開く
※Google Driveから
Google Drive: Sign-in

新しいプロジェクトを選択

4-2.ソースを記載する
// LINE Developersで取得したアクセストークン const ACCESS_TOKEN = '3で取得したアクセストークン'; function doPost(e) { const json = JSON.parse(e.postData.contents); const event = json.events && json.events[0]; if (!event) return; const userId = event.source.userId; const message = event.message ? event.message.text : '(no text)'; const timestamp = new Date(); // ユーザーに返信 const replyToken = event.replyToken; const replyUrl = "https://api.line.me/v2/bot/message/reply"; const headers = { "Content-Type": "application/json", "Authorization": "Bearer " + ACCESS_TOKEN }; const payload = { replyToken: replyToken, messages: [ { type: "text", text: "userID:"+ userId } ] }; UrlFetchApp.fetch(replyUrl, { method: "post", headers: headers, payload: JSON.stringify(payload) }); return ContentService.createTextOutput(JSON.stringify({ status: "ok" })); }
4-3.デプロイ設定






5.Webhook URLを設定
5-1.LINE Developersのコンソールを開く

5-2.ウェブアプリURLを張り付ける

5-3.Webhookの利用を有効にする

6.BotアカウントとLINEで会話し、ユーザーIDを取得する
6-1.BotアカウントのIDを調べる

6-2.LINEを開き、ID検索で上記のIDを検索し、友達追加する
6-3.Botに対して何かチャットする
6-4.LINEの返信でユーザーIDが返ってくる
7.LINE通知スクリプトの作成
実行するとLINEメッセージが送られる
const LINE_TOKEN = 'XXXX'; // LINE Messaging APIのトークン const USER_ID = 'UXXXX'; // 通知先ユーザーID function sendLinePush() { const message = 'こんにちは!' // 送るメッセージ const url = 'https://api.line.me/v2/bot/message/push'; const headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + LINE_TOKEN }; const payload = { to: USER_ID, messages: [ { type: 'text', text: message } ] }; const options = { method: 'post', headers: headers, payload: JSON.stringify(payload) }; UrlFetchApp.fetch(url, options); }
【Apache、Tomcat】特徴と違い
特徴
| 項目 | Apache HTTP Server | Apache Tomcat |
|---|---|---|
| 🎯 主な役割 | 静的コンテンツの配信 | Javaアプリケーションの実行(特にServlet/JSP) |
| 📁 配信対象 | HTML, CSS, JS, 画像, PHP など | Java Servlet, JSP, WARアプリケーション |
| ⚙️ 処理の特徴 | 静的ファイル中心、軽量 | Javaの処理に強い(Webアプリ向け) |
| 🔌 拡張性 | mod_xxx系モジュールで強化(mod_ssl, mod_rewriteなど) | JavaライブラリやWebアプリフレームワークとの連携(Springなど) |
| 🤝 連携方法 | TomcatなどとAJPやプロキシで連携可 | 単体でも動くが、静的ファイル配信はApacheとの組み合わせが多い |
| 使用例 | WordPressサイト、企業サイト | Webシステム(社内システム、ECサイトなど) |
違い
| やりたいこと | Apacheだけ | Tomcatだけ | 備考 |
|---|---|---|---|
| HTMLや画像を表示する | ✅ | ✅(可能だが非効率) | Apacheの方が高速で軽量 |
| PHPを使ったサイト | ✅(mod_phpなどで) | ❌ | TomcatはPHP未対応 |
| JSP/Servletを使うWebアプリ | ❌ | ✅ | Java EE(Jakarta EE)環境が必要 |
| JavaのWebアプリ(Spring Bootなど)を動かす | ❌ | ✅ | WARファイルをデプロイ |
| HTTPS対応 | ✅(mod_ssl) | ✅(Tomcat単体でもSSL対応) | Apacheが多機能で設定簡単 |
| URL書き換え(リライトルールなど) | ✅(mod_rewrite) | 一部可能 | Apacheのmod_rewriteが強力 |
| 負荷分散やリバースプロキシ | ✅(mod_proxyなど) | ❌(単体では難しい) | Apache + Tomcatの構成がよく使われる |
Apacheの主な目的と役割
| 目的 | 説明 |
|---|---|
| 🌐 Webページの配信 | HTML、CSS、画像、JavaScriptなどのWebファイルをユーザーに届ける。 |
| ⚙️ リクエストの処理 | ユーザーがURLを叩くと、HTTPリクエストを解析して適切なファイルや処理結果を返す。 |
| 🧩 動的ページの実行サポート | PHPなどのスクリプト言語と連携して、動的なWebアプリケーション(ブログ、ログインページなど)を提供。 |
| 🔁 リバースプロキシ | 他のサーバー(例:アプリケーションサーバー、Tomcatなど)との中継役として動作。 |
| 🏷️ バーチャルホスト管理 | 1台のサーバーで複数のWebサイトを同時に運用(例:example.com と blog.example.com を分ける) |
| 🔐 セキュリティ設定 | HTTPS対応、アクセス制限、ベーシック認証などでWebサイトを保護。 |
| 📊 ログの記録 | アクセスログ、エラーログを記録し、監視やトラブルシューティングに活用。 |
Tomcatの主な目的と役割
| 目的 | 内容 |
|---|---|
| ☕ Java Webアプリケーションの実行 | Java Servlet や JSP(JavaServer Pages)を動かすためのサーバー |
| 📦 WARファイルのデプロイ | Java Webアプリケーションを .war 形式で配置して、すぐに起動できる |
| 🌐 Webコンテナ(Servletコンテナ)としての動作 | クライアントからのHTTPリクエストをServletにルーティングし、レスポンスを返す |
| 🔄 リクエストとレスポンスの管理 | HTTPのリクエスト処理、セッション管理、クッキーの処理など |
| 📁 Webアプリの構造管理 | /WEB-INF, /WEB-INF/web.xml, /WEB-INF/classes, /WEB-INF/lib などのディレクトリ構成を理解して動作 |
| 🧰 開発~本番環境での利用 | 軽量なため、ローカル開発用にも本番用にも使える |
【Java】文字列操作メソッドまとめ
- フォーマット変換(String.format)
- 比較(equals)
- ブランクチェック(isEmpty)
- 文字列連結(StringBuilder)
- 先頭または末尾の文字列を調べる(startsWith、endsWith)
- 部分文字列を取得する(substring)
フォーマット変換(String.format)
指定したフォーマットにしたがって文字列を作成できる関数
置き換え元の値がnullの場合、Nullと表示されるので注意。
【Java】値の置き換え(String.format) - アルパカノフン
System.out.println(String.format("%sさんは%d歳", "田中", 20)); // 田中さんは20歳
比較(equals)
値を比較する。
Stringのequalsはnullでエラーになるため非推奨。
【java】文字列の比較(equals) - アルパカノフン
"あ".equals("あ") // true
ブランクチェック(isEmpty)
文字列がブランクかチェックする。
nullの場合、エラーになるため非推奨。
【Java】nullチェック - アルパカノフン
String hoge = ""; System.out.println(hoge.isEmpty()); // true
文字列連結(StringBuilder)
文字列を連結する。
Stringクラスを+で連結するより処理効率が良い。
追加する値がnullの場合、「null」が結合される。
【Java】文字列の連結(StringBuilder) - アルパカノフン
StringBuilder sb = new StringBuilder(); sb.append("あいうえお"); sb.append("かきくけこ"); System.out.println(sb); // "あいうえおかきくけこ" // String型へ変換 Strint str = new String(sb);
先頭または末尾の文字列を調べる(startsWith、endsWith)
先頭or末尾の文字列を調べる。
startsWithは開始位置を引数で指定することもできる。(0が1文字目)
調べる文字列がnullの場合、エラーになる。
// startsWith System.out.println("あいうえお".startsWith("あ")); // true System.out.println("あいうえお".startsWith("い")); // false System.out.println("あいうえお".startsWith("い", 1)); // true // endsWith System.out.println("あいうえお".endsWith("お")); // true System.out.println("あいうえお".endsWith("え")); // false
部分文字列を取得する(substring)
開始位置と終了位置(任意)を指定して文字列を取得する。
nullの場合、エラーになる。
// 2文字目以降を取得 System.out.println("あいうえお".substring(1)); // いうえお // 1文字目から2文字目までを取得 System.out.println("あいうえお".substring(0, 1)); // あ // 1文字目から3文字目までを取得 System.out.println("あいうえお".substring(0,2)); // あい
【Java】値の置き換え(String.format)
概要
String.formatとは指定したフォーマットにしたがって文字列を作成できる関数。
置き換え元の値がnullの場合、Nullと表示されるので注意。
使い方
System.out.println(String.format("%sさんは%d歳", "田中", 20)); // 田中さんは20歳 System.out.println(String.format("%sさんは%d歳", null, 20)); // nullさんは20歳 System.out.println(String.format("日付: %tF", new Date())); // 日付: 2024-12-17
【基本】
| 指定子 | 説明 | 入力例 | 出力 |
|---|---|---|---|
| %s | 文字列 | String.format("%s", "abc") | abc |
| %d | 10進数の整数 | String.format("%d", 123) | 123 |
| %f | 10進数の固定小数点表記 | String.format("%.2f", 123.456) | 123.46 |
| %b | ブール値 (true/false) | String.format("%b", null) | false |
| %B | ブール値 (大文字表記) | String.format("%B", true) | TRUE |
【編集】
| 指定子 | 説明 | 入力例 | 出力 |
|---|---|---|---|
| , | 3桁ごとにカンマを挿入する | String.format("%,d", 1234567) | 1,234,567 |
| . | 小数点以下の桁数を指定する (浮動小数点用) | String.format("%.2f", 123.4567) | 123.46 |
| 0 | 数値の左側を0で埋める (指定幅が必要) | String.format("%05d", 123) | 00123 |
【日時】
※他にもあり
| 指定子 | 説明 | 入力例 | 出力 |
|---|---|---|---|
| %tF | 年月日(1970-01-01~9999-12-31) | String.format("%tF", new Date()) | 2024-12-17 |
| %tT | 時刻(00:00:00~23:59:59) | String.format("%tT", new Date()) | 21:54:13 |
| %tY | 年(0000~9999) | String.format("%tY", new Date()) | 2024 |
| %tm | 月(01~12) | String.format("%tm", new Date()) | 12 |
| %td | 日(01~31) | String.format("%td", new Date()) | 17 |
| %tH | 時(00~23) | String.format("%tH", new Date()) | 21 |
| %tM | 分(00~59) | String.format("%tM", new Date()) | 54 |
| %tS | 秒(00~59) | String.format("%tS", new Date()) | 13 |
| %tA | 曜日 | String.format("%tA", new Date()) | 火曜日 |
【Linux(Ubuntu)】デプロイ、Apacheとの連携
デプロイ
Apacheとの連携
mod_proxyモジュールの有効化
コマンド
sudo a2enmod proxy sudo a2enmod proxy_http
Apacheのバーチャルホスト設定
デフォルトのバーチャルホストファイルは
sudo vi /etc/apache2/sites-available/000-default.conf
000-default.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html # 静的コンテンツの処理 <Directory /var/www/html> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> # Tomcatへのプロキシ設定 ProxyPass /demo http://localhost:8080/demo ProxyPassReverse /demo http://localhost:8080/demo ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>


















