ブログ

  • 【LLAMA3の特徴】LLAMA3は何が凄いのか

    【LLAMA3の特徴】LLAMA3は何が凄いのか

    圧倒的な大規模モデル

    LLAMA3は、80億パラメータと700億パラメータの2つのモデルで構成されています。このスケールメリットにより、幅広い分野での高い汎用性能が期待できます。膨大なパラメータ数により、LLAMA3はより複雑な情報を処理し、より人間らしい自然言語生成が可能になりました。

    卓越した自然言語処理能力

    LLAMA3は自然言語の理解と生成で驚異的な能力を発揮します。人間のように自然な会話や文章を生成でき、高度な推論や質問応答も可能です。要約、翻訳、テキスト生成など、多様な自然言語タスクに適用できます。

    画像の生成に関しては以下にある通り非常に高速です。

    Meta AI の画像生成が高速化され、入力と同時に画像が生成されるため、バンドのアルバム アートワーク、アパートの装飾のインスピレーション、アニメーション カスタム GIF などを作成できます。

    META公式サイトより

    多言語対応

    LLAMA3は120以上の言語に対応しており、マルチリンガルな言語モデルとして際立っています。これにより、世界中のユーザーが自身の母語で高度な言語処理を利用できるようになります。

    既存アプリとの連携

    LLAMA3はMETAAIに用いられています。META AIはMETAが先日発表したWEBサービスでCHATGPTのようなツールです。まだ日本では利用が開始されていません。

    FacebookやInstagramなどのMETA社のSNSでは、アプリ上でMETA AIにアクセスしてテキストでの会話や画像生成などの機能を利用することが可能です。

    オープンソース化による活発な開発

    LLAMA3は、オープンソースとして公開されています。これは、研究者や開発者が自由にモデルを改変し、新たな応用例を開発することを可能にします。オープンソース化により、LLAMA3の開発はより活発化することでしょう。

    これからサイトやアプリにオープンソースのAIが導入されることでAIの価格競争が起き、多くの人が安価でAIを利用できるようになるかもしれません。また、AIの開発が加速するはずです。これはオープンソースのメリットでもあります。

    今後の展望

    LLAMAはまだまだ発展途上のAIです。今後新たなトレーニング済みのモデルの発表があるようです。

    私たちの最大のモデルはパラメーターが 400B を超えており、これらのモデルはまだトレーニング中ですが、私たちのチームはその傾向に興奮しています。今後数か月にわたって、マルチモーダリティ、複数の言語で会話する機能、はるかに長いコンテキスト ウィンドウ、より強力な全体的な機能などの新機能を備えた複数のモデルをリリースする予定です。また、Llama 3 のトレーニングが完了したら、詳細な研究論文を公開する予定です。

    META公式サイトより

    これから、より高性能のLLMが発表されることに非常に期待をしております!次の発表が待ち遠しいです。

  • プログラムの拡張

    プログラムを拡張する方法

    • アドオンPGM PGMを新規作成して独立した機能を作成する。標準コピーPGM 標準PGMをコピーして作成する
    • Exit標準の拡張 標準機能の拡張ポイントあらかじめ決められた箇所にプログラム拡張のロジックを追加することができる

    Exitオブジェクトは既存のSAP機能の振る舞いを部分的に変更するのに対し、アドオンプログラムは新しい独立した機能を付け加える。

    アドオンの方が機能拡張の自由度は高くなるが、Exitに比べて開発工数が多くかかる傾向にある。小規模な機能変更ではExitを、大規模な新機能追加ではアドオンを選ぶ、といった具合に使い分けが一般的。

    Exitとは

    Exitとは、標準機能に追加できる拡張プログラムのこと。標準のプログラムを直接変更せず、機能を拡張することができる。

    ここでは、ユーザExitとカスタマExitの違いについて解説していく。

    ユーザExit

    SAP標準のプログラムコードに組み込まれているユーザ定義の拡張ポイントで標準プログラムの実行中に、あらかじめ決められた場所でユーザ独自のコーディングを挿入できる。

    カスタマExit

    ユーザExitとは違い、標準プログラムにあらかじめ用意された拡張ポイントはない。その為、カスタマExitをSAP標準のプログラムから呼び出すコーディングが必要。

    実装方法

    アドオンプログラム

    SE38でプログラムを新規作成

    ユーザExit

    SE37で汎用モジュールを新規作成

    カスタマExit

    SE38でプログラムを作成。CALL CUSTOMER-FUNCTION文を使って標準PGMでカスタマExitを呼び出す。

  • 【SAP】SDモジュール

    【SAP】SDモジュール

    SDモジュールの概要

    SAPのSDモジュールとは、Sales and DistributionSales and Distribution の略です。

    SDモジュールは販売管理のモジュールで、

    受注、出荷、請求

    この3つの機能が大まかな流れとなっていており、最終的に請求情報をFIモジュールと連携させます。

    SDモジュールのチュートリアル動画

    主要機能の詳細

    • 販売管理: 顧客からの注文を効率的に処理し、価格設定や割引管理を通じて、企業の販売戦略をサポートします。
    • 配送管理: 出荷から配送計画、輸送まで、商品が正確にタイムリーに顧客に届けられるように管理します。
    • 請求管理: 販売活動に基づく請求書を生成し、企業の収益管理を強化します。
    • 価格決定: 複雑な価格設定ロジックをサポートし、さまざまな販売条件下での価格を自動的に決定します。

    SAP内での統合

    SDモジュールは、資材管理(MM)、財務会計(FI)、管理会計(CO)など、SAPの他のモジュールと密接に統合されています。この統合により、販売と流通のプロセスが他の業務プロセスとシームレスに連携し、企業運営の効率化を図ります。

    特にSDモジュールは、同じくロジスティック系のモジュールであるMMモジュール(Material Management)と関連性が高くなっています。

    ロジスティック系のモジュール

    商品の購入、生産、在庫管理、商品販売といった物流をメインとするプロセスを扱います。

    SDモジュールのビジネスへの価値

    SDモジュールを活用することで、企業は販売プロセスを効率化し、顧客満足度を高めることができます。正確な配送、迅速な請求処理、柔軟な価格設定により、市場での競争力を強化し、収益性の向上を実現します。

    SDモジュールの活用には以下のようなメリットがあります。

    • 効率的な販売プロセスの最適化
    • 顧客満足度の向上
    • 収益性の向上と市場競争力の強化
    • グローバルビジネスのサポート

    結論

    SAP SDモジュールは、現代の企業が直面する販売と流通の課題を解決するための強力なツールです。その包括的な機能セットとSAPシステム内での統合性により、企業はより効率的な販売プロセスを実現し、顧客満足度を高めることができます。エンジニアやコンサルタントは、SDモジュールの深い理解を通じて、これらの利点を最大限に活用することができます。

  • 【基本情報技術者試験】合格体験記

    【基本情報技術者試験】合格体験記

    受験時のスペック

    新卒1年目で2023年4月からエンジニアとして働いています。大学では情報系出身ではなかったので、入社前の勉強としてITパスポートを取得しました。受験時の実務経験は半年程度になります。

    <受験時のIT系の資格>

    • ITパスポート

    試験結果は以下の通りです。

    試験結果

    どちらもギリギリでした。体感では、午前は700点取れたと思っていたのでかなり危なかったです。

    過去の試験結果

    基本情報技術者試験は過去2回不合格になっていました。。

    過去の試験結果はこちらです。

    1回目

    1回目の受験時(10月)

    A試験は実力通り、B試験は150点分ぐらい勘が当たった気がしています。

    この時は全体的に演習不足という感じがしていました。

    2回目

    2回目の受験時(11月)

    A試験だけは突破しなければと思い、対策にかなり力を入れました。

    B試験は実力通りだったと思います。

    学習の全体像

    3月参考書1周
    8月過去問道場(A試験)を数問、B試験の問題集を半分くらい
    9月過去問道場(A試験)を100問
    10月B試験の対策を1週間で詰め込み受験
    11月過去問道場(A試験)を300問。A試験対策にかなり力を入れ受験
    12月A試験とB試験どちらもペースダウン。。
    1月7割B試験対策に時間を使う。晴れて合格!

    3月から学習をスタートしましたが、新人研修や引っ越し、初めての業務などがあり学習を思うように進められませんでした。

    途中で何回もあきらめそうになりましたが、なんとか合格できました。

    基本情報技術者試験合格に向けて学習する中で反省点がいくつかありました。

    ①インプット中心×

    ②偏った学習×

    ③本番を意識しない×

    ①参考書を読み進めるだけ(Youtubeの解説動画をみるだけ)の学習

    ②A試験対策をしている間にB試験対策をしない(逆も同じ)

    ③時間をはからずだらだら勉強してしまう、本番を想定していない。

    これらは学習効果が低く勉強が無駄になってしまうので、絶対にやらないでください!

    これから試験を受ける予定の方は、試験に向けて効果的な学習ができるようにしっかりと対策を立てていきましょう。

    学習教材

    ここではお勧めの学習教材を紹介していきます。

    【基本情報技術者試験YouTuber】すーさん

    YouTubeでの学習は有効で、僕は【基本情報技術者試験YouTuber】すーさんの動画で学習しました。非常にわかりやすかったのでおすすめです。

    試験対策にはアウトプットが最も効果的なので、過去問道場でアウトプットを行いましょう。

    https://www.fe-siken.com/fekakomon.php

    また、書籍で出題範囲をすべて確認できるとよいかと思います。

    参考書は以下のどちらかをお勧めします。イラスト多めが好みの方は「キタミ式」を選んでおくと良いです。

    最後に

    かなり苦戦した基本情報技術者試験でしたが、受験して勉強法を見直して改善を繰り返すと少しずつですが成長した実感があります。今回の試験でさらに勉強法を改善できると思うので、応用情報技術者試験も合格できるように学習を続けようと思います!

  • Geminiの活用方法を考察してみた

    Geminiの活用方法を考察してみた

    Geminiの発表

    2023年12月7日、先日Googleから新しいAIモデルの発表がありました。

    Geminiはマルチモーダルという仕組みが採用されており、テキストや画像、音声から総合的にデータの取得・分析を行います。

    性能はGPT4を凌ぐ性能だといわれており、各専門家のトップと同じ程度と語られています。

    Geminiのモデルについて

    Geminiには3種類のモデルがあります。

    ・Gemini nano

    デバイス上のAI。PixcelシリーズなどのGoogleデバイスに搭載される予定。

    ・Gemini pro

    Bardにすでに搭載されているモデル。幅広いタスクに対応できる。

    ・Gemini Ultra

    最大性能のモデル。2024年1月から利用できる。

    Geminiでできること

    • 数学、物理の問題の解説
    • コーディングのアドバイス(Python, JAVA, C++,Go)
    数学、物理の問題の解説
    コーディングのアドバイス

    理系分野の問題の解説やコーディングの補助など、教育分野に活用できそうです。

    また、日々の学習として動画のインプットに加えてBardでわからない問題の解説もしてもらえるということがわかりました。

    まとめ

    私がお勧めする活用方法は、学習コーチ兼講師として活用することです。塾の先生みたいなイメージです。

    GPTSのように個別チャットボットが作成できるようになるとかなり使いやすくなると思います。

    日本語対応に関してはすでに行われているので、良い利用方法を見つけたいです。

  • プログラミング言語の特徴

    プログラミング言語の特徴

    オブジェクト指向型

    Java

    Javaはオブジェクト指向言語の代表例であり、デスクトップアプリやAndroidアプリの開発に広く使われています。ソースコードの修正が容易で、大規模開発に適している点が特徴です。また、求人数も多く、仕事を求めるプログラマーにおすすめの言語です。

    PHP

    PHPはWebアプリ分野で活躍する言語で、文法が平易なため初心者にも習得が容易です。フレームワークが充実しており、ECサイトやSNSなど多様なアプリを開発することが可能です​。

    JavaScript

    JavaScriptはWebアプリ分野のフロントエンド開発に特化した言語です。サイトの表側のレイアウトやサイト表示後の処理を担当することが多いです。

    Python

    Pythonはプログラミング初心者から上級者まで幅広く使われる言語です。シンプルで覚えることが少ない構文、1行で多くの処理を記述できる点、外部ライブラリの豊富さ、標準ライブラリにより多くの機能が用意されている点が特徴です。

    C++

    C++はC言語をオブジェクト指向で書けるようにした言語で、C言語の機能にオブジェクト指向の概念を加えたものです​。

    Swift

    SwiftはiOSアプリ開発で使われる言語で、iOSだけでなく、MacブックやApple WatchなどApple製品全ての開発で使用可能です。文法が平易でバグが出にくい仕様であるため、初心者にも扱いやすいという特徴があります。

  • クラスとメソッド

    はじめに

    ABAPプログラミングでは、大規模開発や保守のしやすさを考慮し、オブジェクト指向プログラミング(OOP)の考え方を取り入れることが重要です。その核となるのが、「クラス」と「メソッド」です。昔から使われている汎用モジュール(Function Module)に対して、クラスを使うことでカプセル化再利用性を高め、拡張しやすい設計を実現できます。

    クラスとは

    「クラス」は、属性(データ)とメソッド(処理)をまとめて定義したもので、いわば「設計図」のようなものです。
    クラスの性質をもつオブジェクト(実体)をプログラムで生成することをインスタンス化と呼びます。

    動的属性と静的属性

    動的属性(Instance Attributes)
    インスタンスに応じて異なる値を保持する属性のことです。たとえば ZCL_HUMAN クラスにおいて「名前」や「年齢」のようなプロパティは、各インスタンスごとに異なる値をもつため、動的属性となります。

    静的属性(Static Attributes)
    クラスそのものがもつ属性で、インスタンスに依存しません。全インスタンスで共有される情報や定数などを保持する場合に利用します。宣言には CLASS-DATA を使います。

    クラス化がもたらすメリット

    • カプセル化:データと処理をひとまとまりにして、外部から見えない情報を隠蔽できる。
    • 再利用性:同じ処理を複数箇所で使いまわしやすい。
    • 拡張性:クラス継承などで機能の追加や変更がしやすい

    メソッドとは

    「メソッド」は、クラス内部に定義される処理のまとまりです。
    関数やサブルーチンのように、ある特定の作業を行うロジックをまとめたブロックですが、クラスの一部として定義する点が大きな特徴です。

    • インスタンスメソッド:インスタンスに属するメソッドで、「インスタンス名->メソッド名」のように呼び出します。インスタンス固有の動作を実装します。
    • クラスメソッド(スタティックメソッド):クラス自体に属するメソッドで、インスタンス化せずに「クラス名=>メソッド名」で呼び出せます。

    クラスとメソッドの定義

    ABAPでは、クラス定義部(DEFINITION)クラス実装部(IMPLEMENTATION) を分けて記述します。

    トランザクションコード SE24 でもGUIベースで同様の概念があります。

    クラス定義部(DEFINITION)と実装部(IMPLEMENTATION)

    CLASS zcl_human DEFINITION PUBLIC.
      PUBLIC SECTION.
        DATA: mv_name  TYPE string,   "動的属性(インスタンス属性)
              mv_age   TYPE i.
    
        METHODS: constructor
          IMPORTING iv_name TYPE string
                    iv_age  TYPE i.
    
        METHODS: run.   "インスタンスメソッド
        CLASS-METHODS: show_count. "クラスメソッド(スタティックメソッド)
    ENDCLASS.
    
    
    CLASS zcl_human IMPLEMENTATION.
    
      METHOD constructor.
        me->mv_name = iv_name.
        me->mv_age  = iv_age.
      ENDMETHOD.
    
      METHOD run.
        "走る処理
        WRITE: / me->mv_name, 'は走っています。'.
      ENDMETHOD.
    
      METHOD show_count.
        " 静的メソッドのサンプル
        " 例:全体で何人のインスタンスがあるかを表示するとか
        WRITE: / 'クラスメソッド: インスタンス総数を表示します。'.
      ENDMETHOD.
    
    ENDCLASS.
    

    PUBLIC SECTION / PROTECTED SECTION / PRIVATE SECTION

    • PUBLIC SECTION は、他のプログラムやクラスからも参照・呼び出し可能な領域です。
    • PROTECTED SECTION は、サブクラス(継承)からはアクセスできるが、外部プログラムからはアクセス不可。
    • PRIVATE SECTION は、そのクラス内部からのみアクセス可能。

    アクセスレベル(PUBLIC/PROTECTED/PRIVATE)

    ABAPクラスは、外部への公開度をセクションによって管理します。これにより、必要な部分だけを公開し、内部の実装を隠蔽(カプセル化)できます。

    コンストラクタ(METHODS constructor)

    コンストラクタは、インスタンス生成時に自動的に呼び出される特別なメソッドです。初期化処理や必須の属性設定が必要な場合に使います。ABAPでは METHODS constructor として定義します。

    インスタンス化

    クラスを使うには、インスタンス(オブジェクト)を生成する必要があります。ABAPでは以下のように記述します。

    DATA: lo_human TYPE REF TO zcl_human.
    
    CREATE OBJECT lo_human
      EXPORTING
        iv_name = '太郎'
        iv_age  = 20.
    
    • TYPE REF TO <クラス名> は、クラスの参照型を意味します。
    • CREATE OBJECT でインスタンス(実体)を生成します。
    • コンストラクタが定義されていれば、EXPORTING で初期値を渡せます。

    メソッドの呼び出し

    インスタンスメソッドの呼び出し

    インスタンスメソッドは、生成したインスタンスを介して呼び出します。
    モダンな構文では、<インスタンス名>-><メソッド名> と記述します。

    lo_human->run( ).

    レガシーな構文では、以下のようにも記述できます。

    CALL METHOD lo_human->run.

    クラスメソッド(スタティックメソッド)の呼び出し

    クラスメソッド(スタティックメソッド)は、インスタンスを生成しなくても呼び出せます。
    クラス名=>メソッド名」が基本です。

    CALL METHOD zcl_human=>show_count.

    新しい書き方では、CALL METHOD を省略して以下のようにも記述可能です。

    zcl_human=>show_count( ).

    CALL METHOD の省略記法

    ABAP NetWeaver 7.40以降では、CALL METHOD を省略し、直接 クラス名=>メソッド名( ) または インスタンス名->メソッド名( ) のように記述できます。
    可読性の好みやプロジェクトルールによって使い分けましょう。

    汎用モジュールとの違い

    汎用モジュール(Function Module) は、どのプログラムからでも呼び出せる一方、クラスメソッドは特定のクラスに属します。
    ABAPでは、クラスメソッドを利用すれば、

    • カプセル化(関連するデータや処理をひとまとめに管理)
    • 継承
    • ポリモーフィズム(同名メソッドをクラスごとに実装)

    など、オブジェクト指向のメリットを活かした設計が可能です。

    ただし、スタティックメソッドはインスタンス化不要で呼び出せるので、汎用モジュールと呼び出しやすさの点では似ています。
    しかし、「あるクラスに紐付いた機能」という点が明確になるため、プログラムの構造や責務が分かりやすくなるのが大きな利点です。

    実際のクラス・メソッド使用例

    実際のSAP標準クラス(例: CL_ABAP_LIST_UTILITIES)を呼び出すコード例を見てみましょう。

    DATA: lv_field     TYPE string VALUE 'TMP_NAME3',
          lv_display   TYPE string.
    
    CALL METHOD CL_ABAP_LIST_UTILITIES=>REPLACE_INTO_DISPLAY_LAYOUT
      EXPORTING
        field          = lv_field
        display_offset = 40
        display_length = 0
      CHANGING
        display_data   = lv_display.
    
    " または、モダンな構文で記述
    CL_ABAP_LIST_UTILITIES=>REPLACE_INTO_DISPLAY_LAYOUT(
      EXPORTING
        field          = lv_field
        display_offset = 40
        display_length = 0
      CHANGING
        display_data   = lv_display
    ).
    
    • 上記の例はクラスメソッド呼び出しです(CL_ABAP_LIST_UTILITIES=>...)。
    • EXPORTINGCHANGING でパラメータを渡していることがわかります。

    まとめ

    本記事では、ABAPにおけるクラスとメソッドの基礎から具体的なサンプル実装、そして汎用モジュールとの違いを解説しました。主なポイントは以下のとおりです。

    1. クラス定義で属性(動的/静的)やメソッドをまとめて管理することで、データと処理のカプセル化が可能。
    2. インスタンスメソッドはオブジェクトに属する動作を実装し、クラスメソッド(スタティックメソッド) はインスタンス化不要で呼び出し可能。
    3. コンストラクタ(METHODS constructor) を使ってインスタンス化時の初期値や必須設定を確実に行う。
    4. CALL METHOD の古い構文と、新しい ->=> の呼び出し構文を両方理解し、プロジェクトルールや可読性に応じて使い分ける。
    5. 汎用モジュールとの大きな違いは、オブジェクト指向によるカプセル化や継承などの恩恵が得られるかどうか。

    ABAPでもオブジェクト指向を活用することで、保守性・拡張性の高いプログラムを実現できます。慣れないうちは少しとっつきにくいかもしれませんが、ぜひクラス設計を意識した開発にチャレンジしてみてください。

  • SAPクエリ

    SAPクエリ

    SAPクエリとは

    SAP クエリアプリケーションは、デフォルトで含まれていないレポートを登録する場合に使用します。SAP クエリは、SAP プログラミング言語 ABAP に関する知識が少ないユーザ、または知識を持っていないユーザ向けに設計されています。

    SAP クエリでは、幅広い方法でレポートを定義したり、基本一覧、統計、ランク一覧などのさまざまな種類のレポートを登録することができます。 

    SAP クエリは、クエリインフォセットクエリインフォセットユーザグループ、および言語比較の 5 つのコンポーネントで構成されています。

    SAP ERPに標準搭載されている参照系の機能で、テーブル情報を一覧検索し、参照できるプログラムのこと。テーブルの必要な項目だけを参照することができる

    ビューとの違い

    ビューとは、、

    テーブルからデータを抽出し、新しい仮想テーブルを作成するために使用されるデータベースオブジェクトのこと。

    SAPクエリビュー
    定義データ抽出ツールデータベースオブジェクト
    作成方法クエリを記述クエリを記述
    データ取得方法テーブル、ビュー、外部データソースからテーブルから
    機能複雑なクエリの実行、データの可視化、分析データの抽出
    利用方法データベースへのアクセス権を持つユーザーが利用できるデータベースへのアクセス権を持つユーザーが利用できる
    SAPクエリとビューの違い

    インフォセット

    インフォセットは、SAPクエリを作成するために必要なデータオブジェクトです。ここではデータ構造の定義を行います。テーブルやビューからSQLで自動的にデータを取得してデータ構造を作成しています。

    SQLでDBテーブルからデータを取得します

    また、インフォセットをユーザーグループに設定することで、特定のユーザーだけがデータにアクセスできる権限管理も行うことができます。

    インフォセットの設定はトランザクションコードSQ02から設定を行うことができます。

    クエリ

    クエリはデータの表示設定が行われている場所です。どのように画面表示するかを設定できます。

    クエリで、インフォセットとユーザーグループを設定します。これによって、誰に何の情報を表示するかを決めることができます。

    クエリの設定はトランザクションコードSQ01から設定を行うことができます。

    クエリには項目グループの中に項目があるので、インフォセットと項目が一致している必要があります。また、クエリ調整の機能を覚えておくと便利です。こちらは項目の型などの不一致を自動で調整してくれるためエラーを修正できます。

    まとめ

    参考資料

  • VisionOSアプリ構築のための準備

    VisionOSアプリ構築のための準備

    VisionOSアプリ

    Apple Vision Pro上のアプリを構築するためのステップを紹介していきます。

    これから作成していくアプリはApple Vision Proで動作します。

    WWC2023

    開発において重要なことは3次元であるということです。平面のアプリと比べてかなりユーザー体験に差が埋めれるのではないかと考えています。なので、アップルのドキュメントをしっかり読んでデザイン・アプリ構築・フレームワークの活用をしていく必要があります。

    開発の始め方

    開発を始めるには、MacBook が必要です。

    持っていない方は購入しましょう。おすすめはMacMiniです。

    次に、Xcodeのダウンロードです。

    Xcodeは統合開発環境と呼ばれ、アプリ開発に必須となります。

    ドキュメントを読む

    アプリ開発を始めるにあたって、ドキュメントを読んで学習する力がとても大切になります。

    Visonproはまだ端末の発売もされていないですし、開発環境もβ版です。もちろん、専門的な本も出版されていません。

    英語のドキュメントを読み、学習するほかないのです。

    3次元空間に関する資料

    full space

    3Dオブジェクト

    デザイン

    空間デザイン

    参考資料

  • ABAP 7.4と7.5以降の新しい文法:内部テーブル操作の基本

    ABAP 7.4と7.5以降の新しい文法:内部テーブル操作の基本

    S/4 HANAで使用可能な文法「ABAP7.4以降」について、7.4と7.5より前の文法と比較しながら解説します。この記事では、特に内部テーブルから特定の行を抽出する方法に焦点を当てています。このテクニックは、データ分析やデータ管理において非常に重要なスキルとなります。

    ABAP 7.5以降の新しいSELECT文記述方法について

    ABAP 7.5以降では、SELECT文の記述方法が大幅に拡張され、より柔軟なデータ操作が可能になりました。この記事では、その新しい記述方法について詳しく解説します。

    リテラル値、固定値、変数値を取得項目に指定する

    ABAP 7.5xでは、リテラル値、固定値、変数値をSQLの取得項目として指定できます。これにより、より直感的なコード記述が可能になりました。以下に具体的なコードを示します。

    DATA: var1 TYPE char10 VALUE 'VARIABLES'.
    CONSTANTS: CONS1 TYPE char10 VALUE 'CONSTANTS'.
    
    SELECT FROM vbak AS t1
        FIELDS
          'LITERAL' AS lit,                  "リテラル値
          @var1 AS  var_field,               "変数
          @CONS1 AS cns_field,               "固定値
          @abap_on as check,                 "予約語
          @( VALUE vbak-erdat( ) ) AS erdat, "初期値
       INTO TABLE @DATA(results).
    

    演算値を取得項目に指定する

    ABAP 7.5以降では、テーブル項目値や変数、数値リテラルを使用した演算結果を項目値として格納することができます。以下に具体的なコードを示します。

    SELECT FROM vbap
        FIELDS
           netwr,  "項目IDがNETWRで定義される
           kwmeng, "項目IDがkwmengで定義される
           netwr * 100 AS jpy_netwr, "演算結果
           CASE kwmeng "条件分岐
            WHEN 0 THEN 0
            ELSE division( netwr , kwmeng, 3 )
           END AS calc2,
           CASE kwmeng 
             WHEN 0 THEN CAST( 0 AS FLTP )  "結果がFLTP型になるため
             ELSE CAST( netwr AS FLTP ) / CAST( kwmeng AS FLTP )
           END AS calc3
        INTO TABLE @DATA(results).
    

    文字列編集処理の結果を項目に設定する

    ABAP 7.5xでは、簡単な文字列の編集処理がSQLでできるようになりました。以下に具体的なコードを示します。

    SELECT FROM sflight
      FIELDS
        @abap_on AS check, "固定値
        carrid,
        connid,
        concat_with_space( carrid,connid,4 ) AS cws,
        left( planetype, 3 ) AS plane_series1,
        length( planetype ) as plane_series2,
        lpad( CAST( paymentsum AS
    

    ABAP7.5以降では、SELECT文の条件にFOR ALL ENTRIES を指定して内部テーブルの項目を抽出条件として使うことができます。

    データ宣言

    これまで事前に定義する必要があったデータオブジェクトをabap命令の一部として定義できます。

    データオブジェクト・・・変数、構造、内部テーブルのこと

    変数の宣言

    DATA(LT_XXX) = ‘HELLO’

    構造やフィールドシンボルも同じように宣言して使うことができます。

    内部テーブルの宣言

    DATA: BEGIN OF <内部テーブル> Occurs 0,

    具体例:

    DATA: BEGIN OF LT_TAB Occurs 0,
      MVKE-VKORG LIKE MVKE-VORG,
      ZZCONTS LIKE ZZCNTS,
    END OF LT_TAB.

    このように内部テーブルを記述できるのでコードが短くて済みます。

    「Ocuurs 0 」というのは、データが格納されるまでレコードが0という意味です。つまり、内部テーブルが宣言された段階ではヘッダだけを持つ内部テーブルということになります。

    TYPE STANDARD TABLE OFを使用していなくても、OCCURSを使用した宣言は内部テーブルを作成します。ただし、現在のABAPのバージョンでは、OCCURSを使用する代わりにTYPE STANDARD TABLE OFやTYPE SORTED TABLE OFなどのより明確な構文を使用することが推奨されています。

    ABAPの内部テーブル操作について

    ABAPでは、内部テーブルを使用してデータを一時的に格納し、操作することができます。この記事では、その操作方法について詳しく解説します。

    内部テーブルから特定の行を抽出する

    ABAP 7.4では、以下のようにREAD TABLE文を使用して行を抽出していました。

    READ TABLE lt_bkpf INTO ls_bkpf INDEX 1.

    しかし、ABAP 7.5では、新しい文法を使用して同じ操作を行うことができます。

    DATA(ls_bkpf) = lt_bkpf[ 1 ].

    この宣言方法では自動的に左側の構造は右側の内部テーブルと同じ項目を持つ型になるようにします。

    この文法は、より直感的で記述するコードを短くすることができます。ですが、以下のような欠点もあります。

    • BINARY SEARCHがない
    • SY-TABIXが更新されない

    BINARY SEARCHがないと、大きな内部テーブルを効率的に検索することができません。また、SY-TABIXが更新されないため、テーブルの現在のインデックスを追跡することができません。

    また、新文法を使って内部テーブルから特定の行を抽出する方法は以下の通りです。

    DATA(ls_bkpf) = lt_bkpf[ bukrs = ‘0001’ ].

    このコードは、内部テーブルlt_bkpfから、bukrsが’0001’の行を抽出します。このように、新文法を使用すると、特定の条件を満たす行を簡単に抽出することができます。