くらっちのクラウド日記

仕事や勉強で得た Microsoft 365 関連の技術知識を投稿していくブログです。

【Git】現在のブランチの親ブランチを確認したい

はじめに

「あれ、このブランチの親ってどのブランチだっけ?」と思うことがあったので調べてみたら素敵な記事を見つけました。
個人的な備忘録ですが、誰かのお役に立てば幸いです。

親ブランチを確認したい

現在のブランチの親ブランチを知りたいときは下記コマンドを実行してください。
下記コマンドを実行すると、親ブランチの名前が表示されます。

git show-branch | grep '*' | grep -v "$(git rev-parse --abbrev-ref HEAD)" | head -1 | awk -F'[]~^[]' '{print $2}'

参考

自分の親ブランチが知りたい

関連

kurattyodiary.hatenablog.com

【REST API】REST APIの基本を勉強しろ!調べた結果をまとめてみた

はじめに

こんにちは、くらっちです。
最近仕事でAPIの設計に携わることになり、REST APIについて色々調べたのでまとめました。
私個人のメモですが、皆さんのお役に立てばうれしいです✨

目次

REST APIとは

API2つのアプリケーション(システム間)で情報をやり取りするための窓口 です。
API を通してDBにデータを登録・更新・取得・削除したり、他アプリのデータ処理を行うことができます。



REST API は下記の「RESTの原則」に従って設計された API です。
REST API統一インターフェース、アドレス可能性、ステートレス、接続性という特徴を持っていて、クライアントとサーバー間の通信は『HTTP』を介して行われます。
「RESTの原則」を満たしていない APIREST API とは言わず、Web API などと呼びます。

RESTの原則

1. 統一インターフェース

統一された方法で通信を行います。
処理の内容に応じてインターフェース(HTTPメソッド)が決まっています。

「データの登録」は「POST」
「データの更新」は「PUT」
「データの取得」は「GET」
「データの削除」は「DELETE」です。

2. アドレス可能性

下記のように必ず一意のURLを持っており、URLを指定することで特定のリソースにアクセスできます。

例1:https://xxxxxx.co.jp/v1.0/users
例2:https://xxxxxx.co.jp/v1.0/users?country=Japan

3. ステートレス

ステートは「状態」を表し、ステートレスは「状態がない」と表せます。
「状態がない」=「サーバー側はクライアントとの通信情報を保持しない」と言えます。
サーバー側はクライアントとの通信情報を保持しないため、リクエストの度にすべての情報を送らないといけません。


REST API がステートレスであるのは下記のような理由があります。
- アプリケーションの状態を覚える必要がないため、サーバ側のシステムは単純になる
- サーバ資源をすぐに開放できるという利点があり、負荷軽減や操作性が向上する

4. 接続性

リクエストとレスポンスの情報にリンクを含めることができます。
そのリンクはリソースへのアクセスや関連するリソースを参照するために使用されます。
リソースに接続して必要な処理を行うのです。

REST APIの構成

REST API は、HTTPメソッドとURIの組み合わせで構成されています。

HTTPメソッド

APIを呼び出すときに必要な操作の種類(インターフェース)のことです。
具体的には下記のようなものがあります。
GET(データ取得)、POST(データ登録)、PUT(データ更新)、DELETE(データ削除)

URI(Uniform Resource Identiier)

URIとは「Web APIを利用するためのURL」のことです。
下図のように「プロトコル」「ドメイン」「パスパラメータ」の組み合わせで構成されます。

リクエストとレスポンス

リクエス

リクエストヘッダー

リクエストの詳細情報をサーバーに伝えます。
APIを呼び出すために必要な情報でリクエストの内容や形式、認証情報などを指定します。


主な情報
 クライアント情報
  ・User-Agent:クライアントのソフトウェア名やバージョン
  ・Accept-Language:クライアントの使用言語設定
 リクエストのメタデータ
  ・Content-Type:リクエストボディのデータ形式
  ・Content-Length:リクエストボディの長さ(バイト数)
 認証/認可情報
  ・Authorization:認証トークンやAPIキー等
 APIの指定
  ・Accept:受け入れ可能なレスポンスのデータ形式

ボディ

ボディはリクエストの本文です。
実際に送信するデータ本体であり、JSONなどの構造化データを渡します。

ヘッダーとボディを含めたリクエストの形式はこのような形になります。

POST /api/members HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: [バイト数]
Authorization: Bearer [トークン]

[JSONデータ]

具体例:members情報をPOSTする場合

POST /api/members HTTP/1.1 
Host: example.com
Content-Type: application/json
Content-Length: 236
Authorization: Bearer f47ac10b-58cc-4372-a567-0e02b2c3d479

{
    "members":[
        {
            "member_name": "tanaka_taro",
            "member_address": "東京都板橋区○○ 111-111-111",
            "member_telephone": "090-1111-2222",
            "member_hobby":[
                {
                    "hobby_id": 1,
                    "hobby_name": "将棋"
                },
                {
                    "hobby_id": 2,
                    "hobby_name": "サッカー"
                }
            ]
        }
    ]
}

レスポンス

リクエストのあと、サーバー側の処理の結果をAPI経由で受け取ります。
受け取る情報の形式や内容を定義する必要があります。

レスポンス例:GET 成功時

HTTP/1.1 200 OK
Content-Type: application/json

{
 "members": [
  {
      "id": 1,
      "name": "John Doe",
      "email": "john.doe@example.com"
  },
  {
      "id": 2,
      "name": "Sam Ocean",
      "email": "sam.ocean@example.com"
  },
 ]
}

レスポンス例:POST 成功時

HTTP/1.1 201 Created
Content-Type: application/json

{
    "id": 2,
    "name": "Alice",
    "email": "alice@example.com"
}

レスポンス例:PUT 成功時

HTTP/1.1 200 OK
Content-Type: application/json

{
    "id": 2,
    "name": "Alice Smith",
    "email": "alice.smith@example.com"
}

レスポンス例:DELETE 成功時

HTTP/1.1 204 No Content

HTTP ステータスコード

HTTPステータスコードは、リクエストの結果を示すコードでHTTPプロトコルの一部として定義されています。
リクエストが正常終了した、エラーが発生した、または他のアクションが必要かを通知します。

Code 意味 説明
200 OK 正常終了
204 No Content 正常終了したが返す値はなし
400 Bad Request リクエストが不正(バリデーションエラーなど)
401 Unauthorized 認証が必要
403 Forbidden リクエスト拒否(権限なし)
404 Not Found リソースが見つからない
500 Internal Server Error サーバーの内部エラーが発生。設定ミス、リソース不足など
502 Bad Gateway サーバー間の通信で発生した問題

参考

REST入門 基礎知識
ステートレスとは何か
REST APIとは何か?初心者にもわかりやすく解説します!
【図解】RESTful API とは何なのか【2024年版】

【Git】よく使うコマンド集 -基本編-

はじめに

こんにちは、くらっちです。
久々にGit を使ってみたのですがGitのコマンド結構忘れていました。
個人的なメモですが、よく使うコマンドだけをまとめたので皆さんの参考になれば幸いです。

目次

よく使うコマンド

リポジトリをコピーする

既存リポジトリを個人のPCにコピーして、ローカルで作業できるようにします。
Gitにおける作業はすべてローカルリポジトリの中で実施します。

git clone <リポジトリのパス(URL)>
例:git clone https://github.com/xxxxxxxxx/HelloWorld.git


ブランチを確認する

ローカルブランチを一覧表示、現在作業中のブランチも確認できます。

Git branch

ローカルブランチのバージョンを確認します。

Git branch -vv


作業するローカルブランチを変更する

Git checkout <ブランチ名>


ローカルにブランチを作成する

作業中のブランチをベースにして新しいブランチを作成します。
新しいブランチは「作業中のブランチ」をコピーしたものが作成されます。

Git checkout -b <新規ブランチ名>
例:git checkout -b Animals


ローカルブランチの更新をリモートブランチに反映する

ローカルブランチで更新した内容をリモートブランチに反映させます。
pushの際、リモートに指定のブランチが存在しない場合は新しいブランチを作成します。

git add .
git commit -m "コメント入れる"
git push origin <更新するリモートブランチ名>

上記コマンドはそれぞれこんなことをしています。
 1.add で index(コミット前の下書き保存場所みたいなイメージ)に登録
 2.commit することでローカルリポジトリを更新する
 3.push してローカルリポジトリの内容をリモートリポジトリに送信
    ⇒その結果、リモートブランチが更新される

リモートブランチの更新をローカルブランチに反映する

リモートブランチの更新をローカルブランチに反映させます。

Git checkout <更新元のローカルブランチ>
Git pull
Git checkout <更新先のローカルブランチ>
Git merge <更新元のローカルブランチ>

例:
Git checkout groups  ※groupsブランチに移動
Git pull       ※groupsをリモートブランチと同じ状態にする
Git checkout users  ※usersブランチに移動
Git merge groups   ※usersブランチとgroupsブランチを統合



Git pull で下記エラーが発生した場合
ローカルブランチと紐づいていたリモートブランチがなくなっている可能性があります。

Your configuration specifies to merge with the ref 'refs/heads/~' from the remote, but no such ref was fetched.


ローカルブランチの名前を変更する

ローカルブランチの名前を変更します。リモートブランチの名前は変わりません。

git branch -m <古いブランチ名> <新しいブランチ名>

現在作業中のローカルブランチ名を変更する場合

git branch -m <新しいブランチ名>


ローカルブランチとリモートブランチの紐づきを解除する

ローカルブランチとリモートブランチの紐づきを解除します。

git branch --unset-upstream


紐づきを解除したら、下記コマンドで正しいリモートブランチと接続しましょう。

git branch -u <ブランチ名>


ローカルブランチを削除する

ローカルのブランチを削除します。リモートのブランチは削除されません。

Git branch -b <削除するブランチ名>


「is not fully merged」のエラーが出た場合は下記コマンドで強制的に削除します。
リモートにマージしていない部分は反映されずに削除されるため注意が必要です。

git branch -D <削除するブランチ名>


ブランチを指定バージョンに戻す

ローカルブランチのバージョンを指定のバージョンに戻します。
バージョン番号はGitHubの履歴で確認できます。

git checkout <バージョン番号>


ブランチをaddしないで元の状態に戻す

Git checkout .

ブランチをaddしないで変更前の状態に戻します。
「is unmerged」が出る場合は下記を実行します。

git reset --hard


関連用語

リポジトリ
 開発関連のソースファイルなどを一元管理する場所。バージョン管理が可能

リモートリポジトリ
 クラウド上に存在するリポジトリ

ローカルリポジトリ
 個人利用のPC上に存在するリポジトリ

ブランチ
 「コミット(セーブポイント)の分岐を作る」機能で、この分岐が「ブランチ」です。
 ブランチAで機能Aの開発、ブランチBで機能Bの開発、という住み分けが可能になります!
 最終的にブランチAとブランチBを統合(Merge)して1つの完成版を作成します。

参考 【初心者向け】git fetch、git merge、git pullの違いについて

【Git】ローカルのブランチを削除する方法

はじめに

Git 操作でローカルのブランチを削除する方法について書きました。

ブランチを削除

ローカルのブランチを削除する場合は下記コマンドを実行します。

git branch -d [ブランチ名]

error: is not fully merged が発生

「is not fully merged」のエラーが発生した場合は下記原因が考えられます。

  • 原因 : マージされていないブランチを削除しようとした
  • 対応 : マージして削除する or 強制的に削除する

マージせずに強制的に削除する場合は下記コマンドを実行します。

git branch -D [ブランチ名]

必須理解!命名規則のパスカルケース、スネークケース、キャメルケース

はじめに

今回は命名規則パスカルケース、スネークケース、キャメルケースについてまとめました。
命名規則を決めておくことで可読性やメンテナンス性の向上というメリットがあります。

命名する際は
 ・名前から役割や型が推測できる
 ・明確で簡潔な名前をつける
 ・一般的ではない省略の仕方は極力避ける
 ・特殊文字は使わない
を意識して考えるのがポイントです!!

目次

パスカル、スネーク、キャメル

テーブル名、カラム名、変数などで利用される命名規則です。
会社ごとに利用するケースは様々ですが、パスカルケースやスネークケースが多そう。

パスカルケース

各単語の最初の文字を大文字、残りの文字は小文字にする方法
 例(CustomerData)

スネークケース

単語をアンダーバーで繋げる方法
 例(first_name、is_available)

キャメルケース

先頭の文字は小文字、そのあと各単語の最初の文字を大文字にする方法
 例(totalAmount、databaseConnection)

よくある、テーブルとカラムの命名ルール

テーブル名とカラム名は両方同じケースで、テーブル名は複数形にするのはよく見かける形です。

パスカルケースの場合
 テーブル名:Groups
 カラム名:GroupId、GroupName、GroupType

スネークケースの場合
 テーブル名:books
 カラム名:id、title、type、author


この記事が参考になったな、と思ったらお気に入り宜しくお願いします!!

【SharePoint】【多要素認証】PowerShellでSharePointに接続するときの必須事項

はじめに

PowerShell で SharePointOnline の管理を行う際に、多要素認証が原因でサインインに失敗することがあります。
今回はその時の対処方法を紹介します。

目次

スクリプト紹介

結論から言うと -Credential を使ってサインインしようとすることが原因だったりします。
多要素認証を有効にしている場合は下記コマンドのみを実行してください。

Connect-SPOService -Url https://[テナント名]-admin.sharepoint.com

認証後に別のスクリプトを実行したらうまく情報を取得できました。

Connect-SPOService -Url https://[テナント名]-admin.sharepoint.com
Get-SPOSite

事前準備

PowerShellSharePoint Onlineの管理を行う場合はSharePoint Online 管理シェルをPCにインストールしている必要があります。

・下記コマンドでSharePoint Online 管理シェルがインストールされているか確認します。

Get-Module -Name Microsoft.Online.SharePoint.PowerShell -ListAvailable | Select Name,Version


SharePoint Online 管理シェルがインストールされていない場合は下記コマンドで最新版をインストールします。

Install-Module -Name Microsoft.Online.SharePoint.PowerShell


・下記コマンドでSharePoint Online 管理シェルを最新版にすることができます。

Update-Module -Name Microsoft.Online.SharePoint.PowerShell

注意

SharePoint Online 管理シェルが複数バージョンインストールされている場合、正常に動作しない場合があるようです。
複数バージョンインストールされている場合はPCから一度すべてのSharePoint Online 管理シェルを削除して再度インストールを行ってみてください。

・下記コマンドを実行することでSharePoint Online 管理シェルを削除できます。

UnInstall-Module -Name Microsoft.Online.SharePoint.PowerShell


参考

SharePoint Online 管理シェルでの作業の開始 | Microsoft Learn

【SharePoint】ビューの書式設定で吹き出しを作ってみよう

はじめに

こんにちは、くらっちです。
以前別の記事で、SharePointOnlineのビューの書式設定を使って自己紹介カードを作ったので今回はカーソルをあてた時に吹き出しが表示される機能を追加しました。
サンプルのJSONも用意しているので気になっている方はぜひお試しください。
この記事のサンプルを見れば使い方がざっくりとでも理解してもらえると思います。

※前回記事 kurattyodiary.hatenablog.com

目次

実装例

サンプルコードをリストビューに設定すると下図のようになります。
自己紹介カードの右側色付きの部分にカーソルを合わせると吹き出しが表示されます。

使用する列

今回作成する自己紹介カードに必要な列はこちら。
リストに下記列を追加してください。

表示名 内部名 列の種類 備考
ユーザー Person ユーザーまたはグループ ユーザーのみ選択可
電話番号 PhoneNumber 1行テキスト
所属部署 Department 選択肢 ドロップダウン形式
紹介文 Introduction 複数行テキスト プレーンテキスト

ビューの設定

ビューには下記の列を表示させます。

  • ID ⇒(名前クリックでアイテムのフォームを開くため)
  • ユーザー ⇒(写真・名前・メールアドレスを表示するため)
  • 電話番号 ⇒(電話番号を表示するため)
  • 所属部署 ⇒(所属部署を表示するため)
  • 紹介文 ⇒(吹き出しの中身のため)

サンプルコード

下記のコードをコピーして「ビューの書式設定」に貼り付けて下さい。
コード内の「テナント名]、[サイト名]、[リスト名]は実際のリストに合わせてください。
また、[$Department] == '総務部' の部分も選択肢の内容に合わせてください。

ビューの書式設定は、HTMLをjson形式で記述しています。
HTMLを知っていればカスタマイズも簡単です。
試行錯誤しながら色々使い倒すことをおすすめします!

{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/row-formatting.schema.json",
  "hideSelection": true,
  "hideListHeader": true,
  "rowFormatter": {
    "elmType": "div",
    "style": {
      "width": "350px",
      "margin": "10px",
      "float": "left",
      "padding": "0px 0px 0px 10px",
      "box-shadow": "3px 3px 5px 0 darkgrey"
    },
    "attributes": {
      "class": "ms-bgColor-neutralLighterAlt ms-bgColor-neutralLight--hover"
    },
    "children": [
      {
        "elmType": "div",
        "children": [
          {
            "elmType": "img",
            "style": {
              "display": "block",
              "width": "75px",
              "border-radius": "50%"
            },
            "attributes": {
              "src": "='/_layouts/15/userphoto.aspx?size=M&username=' + [$Person.email]"
            }
          }
        ]
      },
      {
        "elmType": "div",
        "style": {
          "width": "230px",
          "font-size": "1.0em",
          "text-align": "left",
          "overflow": "hidden",
          "text-overflow": "ellipsis",
          "white-space": "nowrap",
          "padding": "5px 5px 10px 5px",
          "margin": "0px 0px 0px 10px"
        },
        "children": [
          {
            "elmType": "div",
            "children": [
              {
                "elmType": "a",
                "style": {
                  "cursor": "pointer",
                  "font-size": "1.2rem",
                  "text-decoration": "none",
                  "class": "ms-fontColor-neutralPrimary"
                },
                "attributes": {
                  "href": "='https://[テナント名].sharepoint.com/sites/[サイト名]/Lists/[リスト名]/DispForm.aspx?ID=' + [$ID]",
                  "target": "_blank"
                },
                "children": [
                  {
                    "elmType": "span",
                    "txtContent": "[$Person.title]",
                    "attributes": {
                      "class": "ms-fontColor-neutralPrimary"
                    }
                  }
                ]
              },
              {
                "elmType": "span",
                "style": {
                  "float": "right",
                  "margin": "5px 5px 5px 15px"
                },
                "children": [
                  {
                    "elmType": "a",
                    "style": {
                      "cursor": "pointer"
                    },
                    "attributes": {
                      "href": "='https://teams.microsoft.com/l/chat/0/0?users=' + [$Person.email]",
                      "target": "_blank"
                    },
                    "children": [
                      {
                        "elmType": "span",
                        "attributes": {
                          "iconName": "OfficeChat",
                          "class": "ms-fontColor-neutralPrimary"
                        },
                        "style": {
                          "font-size": "1.3em"
                        }
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "elmType": "div",
            "txtContent": "[$Department]"
          },
          {
            "elmType": "div",
            "txtContent": "[$PhoneNumber]"
          },
          {
            "elmType": "div",
            "txtContent": "[$Person.email]"
          }
        ]
      },
      {
        "elmType": "div",
        "style": {
          "display": "block",
          "width": "25px",
          "height": "94px",
          "background-color": "=if([$Department] == '総務部', 'gold',if([$Department] == '営業部','bisque',if([$Department] == 'インフラ事業部','cornflowerblue',if([$Department] == 'クラウド事業部','forestgreen','white')))"
        },
        "customCardProps": {
          "openOnEvent": "hover",
          "isBeakVisible": true,
          "directionalHint": "rightTopEdge",
          "formatter": {
            "elmType": "div",
            "style": {
              "max-width": "300px",
              "padding": "20px"
            },
            "txtContent": "[$Introduction]"
          }
        },
        "children": [
          {
            "elmType": "span",
            "attributes": {
              "iconName": "",
              "class": "ms-fontColor-neutralPrimary"
            }
          }
        ]
      }
    ]
  }
}

ここが吹き出し

上記コードの中で、吹き出しを作っているのはこの部分です。
それ以外の部分でカードを作っています。

        "customCardProps": {
          "openOnEvent": "hover",
          "isBeakVisible": true,
          "directionalHint": "rightTopEdge",
          "formatter": {
            "elmType": "div",
            "style": {
              "max-width": "300px",
              "padding": "20px"
            },
            "txtContent": "[$Introduction]"
          }
        },
        "children": [
          {
            "elmType": "span",
            "attributes": {
              "iconName": "",
              "class": "ms-fontColor-neutralPrimary"
            }
          }
        ]

最後に

この記事が気に入った、参考になったという場合は評価して頂けるとすごく励みになります!
最後まで読んでいただいてありがとうございました。

参考

SharePointリストの書式設定(JSON) チートシート #JSON - Qiita